マイクロソフトのエルゴノミック系のキーボードを使っている。
テンキーに電卓ボタンがついていて便利なのだが、押すたびに電卓が立ち上がる。
複数起動を避けるために試行錯誤したメモ。
system32/calc.exeがランチャーの様子。
これをいじりたかったけど、権限がうんたらでうまくいかず。
batかvbsで、電卓を立ち上げる、立ち上がっていればフォーカスを与えるようにする。
いろいろ試したけど、vbsのWscript.ShellのAppActivateで電卓にフォーカスを与えることができず。
メモ帳とかはOK。UWPだから?
仕方ないので、適当な電卓ソフトを探してきて、設置。
VBSを準備
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
Const strCalcExe = "BunCalc.exe" 'プロセス名
call ActiveCalc
sub ActiveCalc()
Dim objWshShell
Dim calcID
calcID=GetProcID(strCalcExe)
'MsgBox calcID
Set objWshShell = CreateObject("Wscript.Shell")
IF calcID = 0 Then
strCmdLine = "D:\nonInstallPrograms\BunCalc\BunCalc.exe"
Set objExecCmd = objWshShell.Exec(strCmdLine)
Else
objWshShell.AppActivate calcID
End If
Set objWshShell = Nothing
End Sub
Function GetProcID(ProcessName)
Dim Service
Dim QfeSet
Dim Qfe
Dim RetInt
Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
RetInt = 0
For Each Qfe in QfeSet
RetInt = Qfe.ProcessId
Exit For
Next
GetProcID = RetInt
End Function
|
Const strCalcExe = "BunCalc.exe" 'プロセス名
call ActiveCalc
sub ActiveCalc()
Dim objWshShell
Dim calcID
calcID=GetProcID(strCalcExe)
'MsgBox calcID
Set objWshShell = CreateObject("Wscript.Shell")
IF calcID = 0 Then
strCmdLine = "D:\nonInstallPrograms\BunCalc\BunCalc.exe"
Set objExecCmd = objWshShell.Exec(strCmdLine)
Else
objWshShell.AppActivate calcID
End If
Set objWshShell = Nothing
End Sub
Function GetProcID(ProcessName)
Dim Service
Dim QfeSet
Dim Qfe
Dim RetInt
Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
RetInt = 0
For Each Qfe in QfeSet
RetInt = Qfe.ProcessId
Exit For
Next
GetProcID = RetInt
End Function
キーの割り当ては、レジストリ。
電卓ボタンは18番らしい。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18
文字列値を新規で追加する
名前 ShellExecute
値 VBSファイルの絶対パス