Khắc phục [QR-Code] sai do bộ gõ tiếng Việt ?

Liên hệ QC

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,894
Được thích
1,214
Xin chào các bạn.
Có thể sử dụng code để điều khiển ứng dụng Unikey được không ạ?
Ví dụ: Unikey đang ở chế độ gõ tiếng Việt, sau khi chạy code chuyển sang chế độ gõ tiếng Anh. Hoặc Unikey đang mở thì đóng lại ạ.
**********************************
Bài viết của tôi đã được giải quyết,hiện tôi đã đưa vào áp dụng kết quả đã OK đối với tôi.

Trong chủ đề có nhiều hướng giải quyết, nhưng tôi xin phép được trích dẫn link các bài viết tiêu biểu trong chủ đề để các bạn tiện theo dõi:
1.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/#post-902152
2.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/page-3#post-902364
3.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/page-7#post-902900

Xin trân trọng cảm ơn tất cả mọi người đã nhiệt tình giúp đỡ và đóng góp ý kiến, đặc biệt với sự giúp đỡ tận tình của các thành viên: Bác @batman1 (@siwtom ) , Anh @huuthang_bd , Anh @Nguyễn Duy Tuân và Bạn @HeSanbi

Xin trân trọng cảm ơn BQT đã tạo ra và đã mang đến cho tôi và mọi người một nơi thật tuyệt vời, một nơi để mọi người cùng nhau có thể trao đổi/học hỏi và cùng nhau thành công trong sự nghiệp.
 
Lần chỉnh sửa cuối:
nói chung trang bị con win và bộ office có bản quyền cũng gần 5 chai , nên khi dùng các chức năng của windows tính ra cũng đâu có miễn phí !
khi dùng các hàm API của win mình thường phải gò theo khuôn khổ các khai báo có sẵn mà không biết trong các hàm API đó nó làm gì , ko như Linux vừa miễn phí mà ta gần như có thể xem mọi thứ bên trong, thông qua đó có thể hiểu đc máy tính nó hoạt động thế nào nếu nghiên cứu , đợi 1 ngày có bản office hỗ trợ macro trên Linux ^^
Có những cái mang tiếng miễn phí mà đối với người dùng chưa hẳn đã miễn phí.
Theo bạn nghĩ, nếu bạn là chủ doanh nghiệp, trang bị hệ thống Linux hay Windows sẽ rẻ hơn?
Gợi ý: giá một chuyên viên Linux cao hơn Windows. Mướn nhân viên biết sử dụng Unix và OpenOffice đắt hơn Windows và MS Office.
Mã nguồn mở có nghĩa là thằng admin có thể mò mẫm sửa lại theo ý nó. Bạn có đủ tự tin để kiểm soát nó không?
 
Upvote 0
Tôi có vài ngu ý tưởng đơn giản thế này còn chuyện capslock đúng là khó thật.
Tôi thấy mấy nước châu Á họ dùng ký tự latin đơn giản vô cùng. Xem comment bóng đá trên youtube thấy mấy anh Malaysia với Indonesia dùng ký tự cực kỳ đơn giản có sẵn ngay trên bàn phím. Như anh Nhật phiên âm Tô ky ô, Tô si ba cũng chỉ là Tokyo với Toshiba nào có cần thêm mũ ô gì đâu
Không hiểu sao trong các nước dùng chữ cái latin ký âm có Việt Nam, và Trung Quốc đứng đầu về độ rối rắm. Ngày xưa dùng chung Hán tự nên mới có câu "Đồng chủng đồng văn". Bây giờ dùng Latin thì "Khác chủng nhưng mà rối rắm văn" :sweatdrop:
 

File đính kèm

  • đề mô.xlsm
    20.3 KB · Đọc: 12
Lần chỉnh sửa cuối:
Upvote 0
Sai bét. Excel được viết bằng C++. Tức là các hàm và đối tượng được viết bằng C++. VBA chỉ gọi các hàm này thôi. Hầu hết các hàm chuyên thì được nối thẳng vào code, các hàm còn lại đưa vào dll (tương tự như các API's)
Có thể trình dịch và nền tảng VBA được viết bằng C++, nhưng theo tôi biết thì hầu hết các trình dịch đươc viết bằng ngôn ngữ tối ưu của từng nơi. Tức là rất có khả năng MS viết bằng ngôn ngữ riêng của họ.
Đúng là lý luận của dân Python, hoàn toàn không có một khái niệm gì về biên dịch và kết nối.
Khi khởi động Excel xong. Không phải mã C++ dựng sẵn được biên dịch và nó nằm chờ lệnh gõ vào bảng tính hay sao vậy anh.
Không có cái gì chạy trước thì VBA vô tự làm hết chăng.
Nếu không thông qua Bảng dựng C++ thì VBA làm sao chạm vào được Cells, làm sao điều khiển được Excel.

"...Hầu hết các hàm chuyên thì được nối thẳng vào code, các hàm còn lại đưa vào dll..."
Cái đoạn này anh nói làm em phải suy nghĩ. Hàm gì nối thẳng vào code. Rồi đưa hàm vào Dll .
Cái đưa thẳng vào Code là hàm được viết đặt trong Thư viện liên kết tĩnh?

Cái hàm đặt trong Thư viện liên kết động Dll được VBA gọi sau thì cái gì nằm chờ chực để kết nối với nó nếu bản dựng C++ không chạy trước nằm chờ bắt chúng thì cái gì thực thi hàm đấy để đưa vào Bảng tính.

VBA khởi tạo lại toàn bộ rồi tự đưa vào bảng tính?
VBA tự đi vào bảng tính rồi lấy dữ liệu? phương thức lấy như thế nào?
VBA không thông qua Bản dựng C++ thì với EXCEL 2016 hơn 1 triệu dòng, hơn 16000 cột.
Nếu anh nói VBA nó làm đó! Nó lấy cái gì ở đâu đó nó làm đó ! Thì không có gì để bàn.

"...Có thể trình dịch và nền tảng VBA được viết bằng C++..." - Sao anh nói mơ mơ hồ hồ
 
Lần chỉnh sửa cuối:
Upvote 0
Trước khi phê bình gõ tiếng Việt thì đã xem qua cái bàn tính mẫu tự Ả Rập chưa?
Người Đông Âu dùng mẫu tự Cyrillic mà có thấy họ than phiền gì đâu?
Nói về giản dị thì 100 năm trước đâu có ai biết trước sự áp đảo của văn hoá Mẽo trên toàn thế giới mà lường trước đặt ngôn ngữ mình theo "tiêu chuẩn" tiếng Anh?

May là người Pháp và Bồ đào nha dùng đơn vị đo lường Metric. Chứ nếu ngược lại Pháp dùng Imeprial và Mẽo dùng Metric thì dân Việt còn thúi đầu cho thiên hạ chửi thêm cái vụ dùng đơn vị "rắc rối, phản khoa học".
 
Upvote 0
Trước khi phê bình gõ tiếng Việt thì đã xem qua cái bàn tính mẫu tự Ả Rập chưa?
Người Đông Âu dùng mẫu tự Cyrillic mà có thấy họ than phiền gì đâu?
"Ở bầu thì tròn, ở ống thì dài" Người Việt làm nô lệ cho dân tộc nào thì chữ viết cũng chi phối bởi dân tộc đó.

Cũng có dân tộc phải dùng chữ viết ngoại quốc vì chịu ảnh hưởng cưỡng bức văn hóa (đồng hóa) nhưng một khiđộc lập thì họ sẵn sàng tiếp thu cái mới miễn sao có lợi cho muôn đời con cháu chứ không phải vì tự nhốt mình vì lưu luyến vài trăm năm lịch sử.

Azerbaizan, Turkmenistan, Kazakhstantừ từ bỏ bộ chữ Cyrillic (xuất hiện dưới ảnh hưởng từ thời đế quốc Nga) sang Latin từ sau Liên Xô sụp đổ. Và chắc chắn là số nước theo trào lưu này sẽ còn tăng. Dù rằng chi phí ban đầu khá tốn kém nhưng nếu xét lợi ích lâu dài cho nhiều thế hệ thì lợi ích mang lại là vô hạn (vài ngàn thế hệ là lợi được cả trăm tỷ đô ấy chứ nếu xét về số công sức tiết kiệm lẫn những phiền toái được loại bỏ).

Giữa các nước dùng bộ ký tự Latin thì bộ chữ quốc ngữ Việt Nam là phức tạp nhất và bị biến đổi nhiều nhất so với bộ chữ Latin gốc dẫn đến là nhiều phiến toái. Có một hãng hàng không Việt Nam đặt tên là TĂNG TỐC nhưng khi ghi bằng chữ Latin trên bảng thông báo điện tử là TANG TOC thế là nhiều vị hàng khách lẩm nhẩm thành "Tang tóc" nên rốt cuộc phá sản vì không ai dám đi (chuyện thật nhé). Đó là 1 sự oái oăm điển hình của chữ quốc ngữ sử dụng trên hệ thống thuần Latin. Tại sao các nước khác cũng mượn bản ký tự Latin chuẩn (không cần thêm ký tự phức tạp) nhưng vẫn có thể diễn đạt được ngôn ngữ của họ?

Xin nhấn mạnh phạm vi những nước dùng chữ Latin thôi nhé bộ chữ Arab với Cyrillic không liên quan tới phân tích của cháu
 
Lần chỉnh sửa cuối:
Upvote 0
Topic (chủ đề) này , chủ topic tự làm khó mình, chiều công nhân quá làm khó máy tính. Cứ để công nhân sai vài lần là họ tự có cách nhớ và tự khắc sẽ biết khi nào cần dùng thì mới chạy Unikey, xong thì tắt để luôn sẵn sàng quét QR-Code
 
Upvote 0
Topic (chủ đề) này , chủ topic tự làm khó mình, chiều công nhân quá làm khó máy tính. Cứ để công nhân sai vài lần là họ tự có cách nhớ và tự khắc sẽ biết khi nào cần dùng thì mới chạy Unikey, xong thì tắt để luôn sẵn sàng quét QR-Code
Chính xác. Tôi cũng rất nhiều lần ngạc nhiên. Ví như anh quản lý nọ cứ kêu là mỗi người làm một kiểu rồi anh ta không thể tổng hợp được. Vậy thì thử hỏi kỷ luật ở đâu? Báo cáo sếp. Có qui định rõ ràng, ai làm sai phải làm lại. Có mức độ lưu ý, cảnh cáo, sa thải. Sếp có quyền lực, có nội qui hậu thuẫn mà phải thua bọn làm công ăn lương thì quá lạ. Có kỷ cương rõ ràng, cố tình vi phạm thì cảnh cáo, sa thải. Lúc đó nếu có ra tòa lao động thì anh công nhân kia cũng không thể thắng kiện được.
 
Upvote 0
Topic (chủ đề) này , chủ topic tự làm khó mình, chiều công nhân quá làm khó máy tính. Cứ để công nhân sai vài lần là họ tự có cách nhớ và tự khắc sẽ biết khi nào cần dùng thì mới chạy Unikey, xong thì tắt để luôn sẵn sàng quét QR-Code

Xin chào tam888,

Như OT cũng đã nói nỗi khổ ở những bài đầu đó ạ. Tổ trưởng đã nhắc nhở nhiều nhưng vẫn không triệt để.
Nếu trừ điểm hạ loại ABC hoặc sa thai mà giải quyết được vấn đề thì không còn gì phải khổ ạ.

Vấn đề là thế này ạ, công ty OT nghèo có thể các chế độ chưa thỏa đáng bằng các công ty khác nên họ cũng không thiết tha, không có nguyện vọng gắn bó lâu dài vì thế công nhân ra vào thay đổi liên tục nên có trừa điểm thi đua họ cũng không có gì phải bận tâm ạ.
Và quan trọng hơn hết là kiểm tra hàng xuất - nhập không được phép để xảy ra lỗi cần phải đặt lên hàng đầu ạ. Khi sự việc đã rồi mà sa thải công nhân cũng không lấy lại được uy tín với khác hàng nữa ạ. Đã liên quan đến khách hàng có rủi ro phải xử lý triệt để ạ.
Vì vậy mà trường hợp này OT nghĩ rằng không hẳn là chiều công nhân ạ.
Cảm ơn bạn đã góp ý ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Nuôi phải con chó cắn bậy thì giải pháp chính đáng nhất là cho nó vào nồi rựa mận. Nếu không biết nhậu cầy thì đem đối chảo nhôm (*).
Cố gắng xiềng xich thì cũng có lúc sơ hở, nó cắn què người ta mà mang tội.

Ngoại lệ: bạn sẵn của để bồi thường nạn nhân hoặc lo lót CA đấm mõm nạn nhân.

(*) hồi xưa, ở vùng tôi có anh mua chó. Anh ấy đi xe đạp chở một đống nồi chảo nhôm để đổi chó.
 
Upvote 0
Bạn thử lại với file này.
Nhân tiện, tiêu đề có lẽ nên nói nguyên nhân là do bộ gõ tiếng Việt hoặc Unikey thì mới rõ.
OT đã test kết quả đã như sự mong đợi của OT rồi ạ, cảm ơn anh Hữu Thắng nhiều ạ.

Tôi có vài ngu ý tưởng đơn giản thế này còn chuyện capslock đúng là khó thật.
Tôi thấy mấy nước châu Á họ dùng ký tự latin đơn giản vô cùng. Xem comment bóng đá trên youtube thấy mấy anh Malaysia với Indonesia dùng ký tự cực kỳ đơn giản có sẵn ngay trên bàn phím. Như anh Nhật phiên âm Tô ky ô, Tô si ba cũng chỉ là Tokyo với Toshiba nào có cần thêm mũ ô gì đâu
Không hiểu sao trong các nước dùng chữ cái latin ký âm có Việt Nam, và Trung Quốc đứng đầu về độ rối rắm. Ngày xưa dùng chung Hán tự nên mới có câu "Đồng chủng đồng văn". Bây giờ dùng Latin thì "Khác chủng nhưng mà rối rắm văn" :sweatdrop:

Cảm ơn bạn đã cho OT thêm cách làm khác ngắn gọn để tham khảo ạ.
anh @Nguyễn Duy Tuân ơi, với 2 cách làm của anh Hữu Thắng và bạn Vô danh, theo kinh nghiệm của anh đã từng va chạm nhiều với thực tế. Vậy còn tình huống nào dẫn đến lỗi do bộ gõ tiếng Việt hay phím CapsLock nữa không ạ. :)
----------------
Chính xác. Tôi cũng rất nhiều lần ngạc nhiên. Ví như anh quản lý nọ cứ kêu là mỗi người làm một kiểu rồi anh ta không thể tổng hợp được. Vậy thì thử hỏi kỷ luật ở đâu? Báo cáo sếp. Có qui định rõ ràng, ai làm sai phải làm lại. Có mức độ lưu ý, cảnh cáo, sa thải. Sếp có quyền lực, có nội qui hậu thuẫn mà phải thua bọn làm công ăn lương thì quá lạ. Có kỷ cương rõ ràng, cố tình vi phạm thì cảnh cáo, sa thải. Lúc đó nếu có ra tòa lao động thì anh công nhân kia cũng không thể thắng kiện được.
Nuôi phải con chó cắn bậy thì giải pháp chính đáng nhất là cho nó vào nồi rựa mận.
....
Cảm ơn hai Bác Siwtom và VetMini đã góp ý cho con, cấp dưới làm sai thiếu trách nhiệm đối với công việc xử lý là phải rồi ạ. Nhưng đôi khi lỗi xảy ra không phải là do cố tình mà cũng là vô tình thôi ạ. Mà cái vô tình này thì lại rất nghiêm trọng nó ảnh hưởng rất lớn vì vậy mà cấp trên cũng phải có trách nhiệm hỗ trợ triệt để cấp dưới để làm sao cấp dưới làm việc vui vẻ với tinh thần thoải mái ạ.

Xin trân cảm ơn sự giúp đỡ của tất cả mọi người ạ.
Oanh Thơ
 
Upvote 0
Xin chào tam888,

Như OT cũng đã nói nỗi khổ ở những bài đầu đó ạ. Tổ trưởng đã nhắc nhở nhiều nhưng vẫn không triệt để.
Nếu trừ điểm hạ loại ABC hoặc sa thai mà giải quyết được vấn đề thì không còn gì phải khổ ạ.

Vấn đề là thế này ạ, công ty OT nghèo có thể các chế độ chưa thỏa đáng bằng các công ty khác nên họ cũng không thiết tha, không có nguyện vọng gắn bó lâu dài vì thế công nhân ra vào thay đổi liên tục nên có trừa điểm thi đua họ cũng không có gì phải bận tâm ạ.
Và quan trọng hơn hết là kiểm tra hàng xuất - nhập không được phép để xảy ra lỗi cần phải đặt lên hàng đầu ạ. Khi sự việc đã rồi mà sa thải công nhân cũng không lấy lại được uy tín với khác hàng nữa ạ. Đã liên quan đến khách hàng có rủi ro phải xử lý triệt để ạ.
Vì vậy mà trường hợp này OT nghĩ rằng không hẳn là chiều công nhân ạ.
Cảm ơn bạn đã góp ý ạ.
Vậy thì bạn cứ áp dụng thôi, giúp và chăm lo cho nhân viên như bạn thì tuyệt vời.
Tôi mà nhân viên ở đó, tôi muốn đề nghị bạn hỏi và kiếm giúp̀ thêm phần mềm hay VBA thế nào đó, khi sếp gần đến thì game, facebook, trang GPE, web báo chí ... tự ẩn đi và Excel được bật lên sẵn sàng cho scan QR-Code ... vì có webcam nhận dạng mặt / bóng sếp thì tốt quá - như thế tốt cho cả nhân viên cả sếp (đỡ buồn phiền phải nhắc nhở nhân viên)
Có được không?
 
Upvote 0
Vậy thì bạn cứ áp dụng thôi, giúp và chăm lo cho nhân viên như bạn thì tuyệt vời.
Tôi mà nhân viên ở đó, tôi muốn đề nghị bạn hỏi và kiếm giúp̀ thêm phần mềm hay VBA thế nào đó, khi sếp gần đến thì game, facebook, trang GPE, web báo chí ... tự ẩn đi và Excel được bật lên sẵn sàng cho scan QR-Code ... vì có webcam nhận dạng mặt / bóng sếp thì tốt quá - như thế tốt cho cả nhân viên cả sếp (đỡ buồn phiền phải nhắc nhở nhân viên)
Có được không?

Dạ,cảm ơn bạn trường hợp này thì không ạ vì máy tính này không được kết nối internet ạ.
Hơn nữa cũng chỉ chống lỗi vô tình thôi ạ, còn cố tình phá thì không còn cách nào nữa ạ.
 
Upvote 0
Dạ,cảm ơn bạn trường hợp này thì không ạ vì máy tính này không được kết nối internet ạ.
Hơn nữa cũng chỉ chống lỗi vô tình thôi ạ, còn cố tình phá thì không còn cách nào nữa ạ.
Có nhận tôi làm nhân viên không? Tôi ứng cử, đảm bảo không cần thêm code vba gì cả (thêm phiền phức và làm chậm), mà unikey sẽ không làm khó... không có chuyện nhầm lẫn
 
Upvote 0
Có nhận tôi làm nhân viên không? Tôi ứng cử, đảm bảo không cần thêm code vba gì cả (thêm phiền phức và làm chậm), mà unikey sẽ không làm khó... không có chuyện nhầm lẫn
Hi, chắc bạn đùa vui ạ.
Đúng là đáng ra công việc này cũng không cần cầu kỳ phức tạp với những người có ý thức công việc, chỉ cần biết chút về máy tính là ổn ạ.
OT là nhân viên bình thường nên cũng không thể quyết định được việc lấy người.
2 nữa là mức thu nhập của công ty OT chắc chắn sẽ không thỏa đáng với những người có kinh nghiệm và kiến thức chuyên môn như bạn đâu ạ.
Cảm ơn bạn đã quan tâm :)
 
Upvote 0
Ở bài #3 có nói rằng:
"có một máy tính chuyên để cho công nhân kiểm tra hàng đầu vào và đầu ra"
1. máy tính chuyên để... Lý do tại sao máy này đã nói là "chuyên" mà lại phải chạy công việc khác?
2. kiểm tra hàng đầu vào và đầu ra... "Kiểm tra" là công việc gì? Đã làm chức năng "kiểm tra" mà lại chập choạng quên tới quên lui.
Cơ quan này bày đặt kuyu a cốt này nọ cho nó hoành tráng. Chỉ có công việc kiểm tra mà cũng không thể bảo đảm chất lượng!
 
Upvote 0
Ở bài #3 có nói rằng:
"có một máy tính chuyên để cho công nhân kiểm tra hàng đầu vào và đầu ra"
1. máy tính chuyên để... Lý do tại sao máy này đã nói là "chuyên" mà lại phải chạy công việc khác?
2. kiểm tra hàng đầu vào và đầu ra... "Kiểm tra" là công việc gì? Đã làm chức năng "kiểm tra" mà lại chập choạng quên tới quên lui.
Cơ quan này bày đặt kuyu a cốt này nọ cho nó hoành tráng. Chỉ có công việc kiểm tra mà cũng không thể bảo đảm chất lượng!
Dạ vâng đúng là chuyên Bác ạ, nhưng chuyên ở đây là đối với máy tính thiết bị ấy Bác.
Còn con người thi thoảng lại ra vào thay đổi, người này người kia, ca này ca kia. Nhất là sau 18h thậm trí có lúc họ để cả mấy ông lái xe quét mã vạch hộ để lái đó giao hàng sớm về sớm ấy chứ Bác.
 
Upvote 0
OT đã test kết quả đã như sự mong đợi của OT rồi ạ, cảm ơn anh Hữu Thắng nhiều ạ.
Tôi đã test qua loa trên Win 10 của hàng xóm thì thấy không ổn. Chắc cấu trúc của Tray khác nhau trong các phiên bản.

Nhân tiện có người sẵn sàng test nên tôi vọc chút. :D

Tôi tải bản Unikey 4.0 RC2 về và thấy như sau. Khi Unikey đang ở chế độ vietnamese và tôi cho trỏ chuột vào biểu tượng thì có lời gợi ý: Click to turn off Vietnamese mode

Tôi nghĩ lời gợi ý này không thay đổi qua các phiên bản. Vậy thì ta chỉ cần đọc ra lời gợi ý và xem nó có đang là Click to turn off Vietnamese mode hay không. Ý tưởng này tôi giải quyết ở phần tiếp theo.

Như vậy ta đã có code đóng Unikey. Còn code không đóng mà chuyển về chế độ Anh. Tức đang ở chế độ Anh thì không làm gì, ngược lại thì chuyển về chế độ Anh.

Tất nhiên để làm được thì ta phải dùng API đọc ra lời gợi ý. Nếu đang là vietnamese (Click to turn off Vietnamese mode) thì chuyển về Anh. Code chuyển lần trước dùng keybd_event để giả nhấn Ctrl + Shift. Lần này ta dùng cơ chế nền tảng, cốt lõi của system Windows, tức thông điệp - gửi thông điệp. Cụ thể là gửi thông điệp WM_LBUTTONDOWN và WM_LBUTTONUP

Code trong Module1. Chạy sub VietnameseOff. Bạn test nếu thành công thì báo cáo nhé. Code viết cho 32 bit.

Mã:
Option Explicit

Private Const WM_USER As Long = &H400
Private Const TB_BUTTONCOUNT As Long = (WM_USER + 24)
Private Const TB_GETBUTTON As Long = (WM_USER + 23)
Private Const MEM_COMMIT As Long = &H1000
Private Const MEM_RELEASE As Long = &H8000
Private Const PAGE_READWRITE As Long = &H4
Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

Private Type TTBButton
    iBitmap As Long
    idCommand As Long
    fsState As Byte
    fsStyle As Byte
    bReserved(0 To 1) As Byte
    dwData As Long
    iString As Long
End Type

Private Type TRAYDATA
    hwnd As Long
    uID As Long
    uCallbackMessage As Long
    Reserved(0 To 1) As Long
    hIcon As Long
End Type

Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, ByRef lpdwProcessId As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

Private Function TrayToolbarWnd() As Long
Dim hTB As Long
    hTB = FindWindow("Shell_TrayWnd", vbNullString)
    If hTB <> 0 Then
        hTB = FindWindowEx(hTB, 0, "TrayNotifyWnd", vbNullString)
        If hTB <> 0 Then
            hTB = FindWindowEx(hTB, 0, "SysPager", vbNullString)
            If hTB <> 0 Then hTB = FindWindowEx(hTB, 0, "ToolbarWindow32", vbNullString)
        End If
    End If
    TrayToolbarWnd = hTB
End Function

Sub VietnameseOff()
Dim nCount As Long, k As Long, sTip As String
Dim tb As TTBButton, tray As TRAYDATA, r As Long
Dim pid As Long, pMemory As Long, hTB As Long, hProcess As Long, BytesRead As Long
    hTB = TrayToolbarWnd
    GetWindowThreadProcessId hTB, pid
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)
    If hProcess = 0 Then Exit Sub
    nCount = SendMessage(hTB, TB_BUTTONCOUNT, 0, 0)
    pMemory = VirtualAllocEx(hProcess, ByVal 0, ByVal 1024, MEM_COMMIT, PAGE_READWRITE)
    For k = 0 To nCount - 1
        SendMessage hTB, TB_GETBUTTON, k, pMemory
        ReadProcessMemory hProcess, ByVal pMemory, tb, LenB(tb), BytesRead
        ReadProcessMemory hProcess, ByVal tb.dwData, tray, LenB(tray), BytesRead
        sTip = String(1024, Chr(0))
        ReadProcessMemory hProcess, ByVal tb.iString, ByVal StrPtr(sTip), 1024, BytesRead
        sTip = Left(sTip, InStr(1, sTip, Chr(0)) - 1)
        If sTip = "Click to turn off Vietnamese mode" Then
            PostMessage tray.hwnd, tray.uCallbackMessage, tray.uID, WM_LBUTTONDOWN
            PostMessage tray.hwnd, tray.uCallbackMessage, tray.uID, WM_LBUTTONUP
        End If
    Next k
    VirtualFreeEx hProcess, pMemory, 0, MEM_RELEASE
    CloseHandle hProcess
End Sub
 

File đính kèm

  • VietnameseOff.xlsm
    19.9 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Ở bài #3 có nói rằng:
"có một máy tính chuyên để cho công nhân kiểm tra hàng đầu vào và đầu ra"
1. máy tính chuyên để... Lý do tại sao máy này đã nói là "chuyên" mà lại phải chạy công việc khác?
2. kiểm tra hàng đầu vào và đầu ra... "Kiểm tra" là công việc gì? Đã làm chức năng "kiểm tra" mà lại chập choạng quên tới quên lui.
Cơ quan này bày đặt kuyu a cốt này nọ cho nó hoành tráng. Chỉ có công việc kiểm tra mà cũng không thể bảo đảm chất lượng!
Kiểu du di đó, cứ kêu trời là sao luật không nghiêm, rồi cuối cùng quản lý đổi tại dân không ý thức và thế là cấm
 
Upvote 0
anh @Nguyễn Duy Tuân ơi, với 2 cách làm của anh Hữu Thắng và bạn Vô danh, theo kinh nghiệm của anh đã từng va chạm nhiều với thực tế. Vậy còn tình huống nào dẫn đến lỗi do bộ gõ tiếng Việt hay phím CapsLock nữa không ạ. :)

Xin trân cảm ơn sự giúp đỡ của tất cả mọi người ạ.
Oanh Thơ

Mình mới xem qua 2 file của 2 bạn đó. Thì mình thấy về cơ bản cả 2 cách đó đều dùng Userform với Textbox để nhận keycode từ scanner. Hướng đi như vậy là đúng như mình nói ban đầu với bạn. Cả 2 file nều cơ bản là ổn, tuy có vài cái nếu bạn sử dụng thì nên cải tiến nó:

1. File của Vô danh: Tuy ngắn gọn nhưng lại bỏ qua nhiều ký tự trong bảng mã chuẩn, ví dụ các ký tự "-", "[", "]",... các ký tự này vẫn nằm trong bộ nhận dạng của máy quét. Nên bạn phải chỉnh sửa mới không bị sót ký tự.

2. File của bạn Huuthang: File bao hàm được các ký tự hơn nhưng cần để keycode vbDelete hoạt động. Trong thực tế vẫn có thể có tình huống hy hữu xảy ra thì người ta vẫn có thể sửa/xóa ký tự trong dải chuỗi. Hoặc bạn thêm nút chắc năng làm việc này. Tuy nhiên, file này tốc độ sử ký key hơi chậm, bạn để ý mỗi ký tự có một độ trễ. Nếu bạn dùng code của file này thì cân nhắc vấn đề mình nói (có thể không phải lớn) thì ok hơn của Vô danh.

Điều quan trọng nữa. Các thiết bị scanner thường không đọc unicode nên ký tự có dấu thường được chuyển đổi về ANSI CHAR. Nếu bạn dùng QR code thì nên test kỹ hơn các mẫu của các nhà phân phối để đảm bảo không sót ký tự, vì QR code người ta thường mô tả nội dung "tự do" khác với Barcode.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom