< návrat zpět

MS Excel


Téma: Kalkulačka rss

Zaslal/a 29.2.2020 20:14

Snažím se spustit třeba kalkulačku a pak používat stejnou instanci a nevytvářet další.. ne jenom spustit kalkulačku... 4

Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal HWnd As Long, lpdwProcessId As Long) As Long
'this holds the return value
Private ProcWinHandle As Long
'this holds the entry process id
Private ProcessHandle As Long
'this is the function to be called to get the window handle from process ID
Public Function GetProcessWindowHandle(ByVal ProcID As Long) As Long
ProcessHandle = ProcID
ProcWinHandle = 0
EnumWindows AddressOf EnumCallBack, 0&
GetProcessWindowHandle = ProcWinHandle
End Function

'this is the callback function for the enumeration process
Private Function EnumCallBack(ByVal HWnd As Long, ByVal lParam As Long) As Boolean
Dim pid As Long
'get the process id for that window handle
GetWindowThreadProcessId HWnd, pid
If pid = ProcessHandle Then 'if it is our process
ProcWinHandle = HWnd 'we found what we wanted
'EnumWindowsCallBack = False
Else 'else
EnumCallBack = True 'tell windows to continue enumeration
End If
End Function

Jelikož netuším, co bude v tiltulku okna dle lokalizace, anglicky Calculator či česky Kalkulačka nebo slovensky Rátačka 1 , tak se pokouším získat hadle okna z id procesu. Pak se snažím spustit kalkulačku, ale pokud je již spuštěná a okno minimalizované, tak ho nedokážu obnovit.
Zkoušel jsem SendMessage(lHwnd, WM_SYSCOMMAND, SC_RESTORE, 0&) nebo ShowWindow lHwnd, SW_SHOW ...
Sub RunCalculator()
Static pid As Long
Dim lhWnd As Long
If pid <> 0 Then
lhWnd = GetProcessWindowHandle(pid)
'lHwnd = FindWindow(vbNullString, "Kalkulaèka")
End If
Dim lRet As Long

If lhWnd = 0 Then
pid = Shell("calc.exe")
lhWnd = GetProcessWindowHandle(pid)
Else
AppActivate pid
'tady obnovit je-li minimalizované
End If
End Sub

Předem díky za případnou pomoc.

Zaslat odpověď >

#046115
avatar
Co fungovalo pro Windows 7 zase nefunguje pro Windows 10 a co fungovalo kdysi nefunguje vůbec... Najde se někdo, kdo to dokáže objasnit? Jeden proces obsahuje více oken a je nějak potřeba najít to správné, viditelné pro obnovení či aktivaci, ale jak?

V tomto provedení sice nepracuje se stále stejnou instancí, ale snaží se najít spuštěné okno, ale je-li spuštěno více instancí, bude potřeba nějak vybrat stejnou.
Nicméně proti původní ukázce vypadá, že funguje pro sedmičky i desítky a dokáže okno obnovit, je-li minimalizované :

API for 32bit :
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" _
(ByVal lhWnd As Long, _
ByVal lCmdShow As Long) As Boolean


Sub ShowCalculator()
Dim calculator As String: calculator = "Calculator"
Select Case Application.LanguageSettings.LanguageID(msoLanguageIDUI)
Case 1029, 1051
calculator = "Kalkulačka"
End Select
Dim lhWnd As Long
lhWnd = FindWindow("ApplicationFrameWindow", calculator) 'win10
If lhWnd = 0 Then
lhWnd = FindWindow("CalcFrame", calculator) 'win7
End If

If lhWnd = 0 Then
Shell "calc.exe", vbNormalFocus
Else
If IsIconic(lhWnd) Then
Const SW_RESTORE As Long = 9
ShowWindow lhWnd, SW_RESTORE
Else
SetForegroundWindow lhWnd
End If
End If
End Sub


Stačí přidat jako akci tlačítka v listu, rozbalovací nabídce či ribbonu a lze otestovat.citovat
#046127
avatar
Líbí se Vám ta nová Kalkulačka ve Windows 10 ? 4

Nezkoušel nějaký staromilec zprovoznit starou z Windows 7 na Windows 10 ? 1

Prostě zkopírovat ze sedmiček někam složky calc.exe a přidat také dvě podsložky cs-CZ a sk-SK se soubory calc.exe.mui, přejmenovat místo calc na calcold ...
Zkusit spustit calcold.exe a stará krásná modrá kalkulačka je znovuzrozená 10 , dokonce si pamatuje původní pozici a nastavení, je-li standard či vědecká ... 2
Je to opravdu takhle jednoduché?citovat
#046135
avatar
Nauč sa Excel a nepotrebuješ kalkulačku a väčšinou ani programovať. Alebo zahoď počítač a kúp si kalkulačku za 30€.citovat
#046139
avatar
vrtko: Dobrá rada nad zlato! Kde jste si koupil tu kalkulačku za 30€?citovat
#046141
avatar
podla toho ze viete vyuzivat aj kniznicu user32 tak odhadujem ze viete dobre programovat.

nebude pre vas jednoduhsie si urobit vlasnu kalkulacku? A ta bude v kazdom ohlade vypadat podla vasich predstav + vystup z nej mozte jednoducho premiesnit do excelu.citovat
#046146
avatar
https://www.alza.sk/casio-fx-991-ex-d2922298.htmcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje