VB6アプリで別のウィンドウにSendKeys()
コマンドを使用しようとしています。
私が欲しかったのは、ボタンをクリックしてから、アプリがいくつかのキーをそのウィンドウに送信する前に、10秒以内に他のウィンドウに移動することです。私はすべてをソートしましたが、何らかの理由でこのようなものを呼び出すと:
SendKeys ("A")
このエラーが発生します:
Run-time error '70':
Permission denied
誰かがこれを回避する方法を知っていますか?ありがとう。
Windows 7の場合: UAC設定を変更して通知しないようにします。
Windows 8および10の場合:
このメソッドを任意のモジュールに追加します。
Public Sub Sendkeys(text as variant, Optional wait As Boolean = False)
Dim WshShell As Object
Set WshShell = CreateObject("wscript.Shell")
WshShell.Sendkeys cstr(text), wait
Set WshShell = Nothing
End Sub
Windows10では問題なく動作しました。
カール・ピーターソンがVistaでこれを修正するために何を作成したかを見てみましょう。
VB6 SendKeysの代わりに、次のようなWScript.ShellSendKeysがあります。
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "1{+}"
ヘルプについては、 [〜#〜] msdn [〜#〜] を参照してください。
パブリックモジュールに次を追加します。
Public Sub Sendkeys(text$, Optional wait As Boolean = False)
Dim WshShell As Object
Set WshShell = CreateObject("wscript.Shell")
WshShell.Sendkeys text, wait
Set WshShell = Nothing
End Sub
これにより、SendKeys関数が「上書き」されます
Windows 7の場合:
アプリケーションから「msvbvm60.dll」ファイルを削除します
次の手順に従ってください
- アプリケーションの.Exeファイルを右クリックし、プロパティをクリックします
- [互換性]タブをクリックします
- [互換モードでこのプログラムを実行する]をクリックし、そこからWindows Xp SP2を選択します。
- [このプログラムを管理者として実行]をクリックします
- [OKより適用]をクリックします。
- アプリケーションフォルダから「msvbvm60.dll」を削除します。
すべて完了しました。これで、アクセスが拒否されたなどのエラーなしでアプリケーションの実行が開始されます。
このAPIを使用します:
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
そして
keybd_event keycode, 0, 0, 0 'KEY DOWN
keybd_event keycode, 0, KEYEVENTF_KEYUP, 0 'KEY UP
キーコードがスペースの場合は32、キーエンドの場合は35、vbKeyBackの場合は8などの場合。
このコードはモジュールで使用できます
Public Sub SendKeyTab(CForm As Form)
On Error Resume Next
Dim G As Single
For G = 0 To CForm .Controls.Count - 1
If CForm .Controls(G).TabIndex = CForm .ActiveControl.TabIndex + 1 Then CForm .Controls(G).SetFocus
Next
End Sub
各フォームレベルで
If KeyCode
問題はvb6 IDEおよびWindowsデスクトップのコンテキストメニューに関するものであり、ここで説明するように実行します。
http://www.vbforums.com/showthread.php?747425-SendKeys-and-Windows-8
そして主なリファレンスはここにあります:
http://www.vbforums.com/showthread.php?745925-RESOLVED-How-to-trigger-the-desktop-context-men