کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

تابع ShowWindow و GetWindow در API



showwindow


Dim IE As Object
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
ShowWindow IE.hwnd, SW_SHOWMAXIMIZED
IE.Navigate "http://www.google.com"
Do While IE.ReadyState <> 4: DoEvents: Loop
Do While IE.Busy: DoEvents: Loop



' Close internet explorer

IE.Visible=True

ShowWindow IE.hwnd,3

Sleep 600

SendMessageA IE.hwnd,&H10,0,0



findwindow

getwindow



hWndP=FindWindow(vbNullString,vbNullString)
'PARENT WINDOW
Do While hWndP <> 0
 hWndP=GetWindow(hWndP,GW_HWNDNEXT)
Loop 



enumchildwindows


برای بدست آوردن کلاس پنجره از تابع GetWindowClassA و کپشن اگر Null نباشد از تابع GetWindowTextA استفاده می نمایند


ret=GetClassName(hwnd,Buffer_Variable,len_Buffer)

if Succeed ...ret=NumberOfCharacterSendToBufferVariableYouSpecified


بدین صورت که بافری تخصیص میدهید با اندازه مشخص و سپس این توابع تعداد کاراکترهایی که در این بافر می ریزد را برمی گرداند اگر صفر باشد یا چیزی نیست یا هندل پنجره اشتباه است.



Buff$=Space(80) ' Buffer

X=Left(Buff$,Len(Buff$)) 

X=Left(Buff$,Instr(Buff$,Chr(0))-1)




getsystemmenu


تابعی برای بدست آوردن هندل منوی سیستم ( همان دکمه هایی که بصورت max min close در TitleBar می بینید چه خود برنامه چه فرم یا گزارشات)


destroymenu


تابعی برای محو کردن منوی مشخص شده و آزاد کردن حافظه ای که منو اشغال کرده.


getwindowlongptra : extended-window-styles : window-styles


بازیابی اطلاع پنجره مشخص شده


window-styles : 

WS_MAXIMIZEBOX

WS_MINIMIZEBOX

WS_SYSMENU

WS_TABSTOP


setwindowlongptra


تغییر ویژگی  پنجره مشخص شده 


lstyle=GetWindowLongPtrA(hwnd,GWL_STYLE)

lstyle=lstyle And Not WS_MINIMIZEBOX

SetWindowLongPtrA hwnd,GWL_STYLE,lstyle



setwindowpos


تغییر سایز و موقعیت برنامه در صفحه


Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type


SetWindowPos hwnd, 0, tRect.Left, tRect.Top, tRect.Right - tRect.Left, tRect.Bottom - tRect.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED

Z-Order موقعیت پنجره را در دسته ای از پنجره های همپوشانی نشان می دهد.


پارامتر دوم ( hwndinsertafter ) :


هندلی به پنجره  که از پنجره ای در z order پیشی گرفته.این پارامتر باید یا هندل پنجره یا یکی از مقادیر مثل زیر باشد.



HWND_TOP : قرار گرفتن پنجره در بالای زِد اُردِر


SetWindowPos Me.hWnd,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE












گرفتن هندل پنجره ها ، البته با تابع EnumChildWindows اینکار راحت تر است و به تابع زیرآن نیازی نیست 


EnumChildWindows hwnd,AddressOf EnumChildWnd,1


Function BrowseHandle(hwndParent As LongPtr)
Dim hwndChild As LongPtr
hwndChild = GetWindow(hwndParent, GW_CHILD)
Do While hwndChild
Debug.Print hwndChild & "... Class Name :" & GetClass(hwndChild) & "... Window Text : " & GetWinText(hwndChild)
BrowseHandle hwndChild
hwndChild = GetWindow(hwndChild, GW_HWNDNEXT)
If GetClass(hwndChild) = "Internet Explorer_Server" Then DD = hwndChild
Loop
End Function



984678... Class Name :OSUIBlank... Window Text : 
525766... Class Name :OSUIBlank... Window Text : 
1050060... Class Name :NUIScrollbar... Window Text : Horizontal
1246666... Class Name :NetUIHWND... Window Text : 
656882... Class Name :OSUI... Window Text : SUI
656874... Class Name :NetUINativeHWNDHost... Window Text : RecNavHost
591334... Class Name :NetUIHWND... Window Text : 
591330... Class Name :NetUICtrlNotifySink... Window Text : 
591336... Class Name :RICHEDIT60W... Window Text : Search
591358... Class Name :NetUICtrlNotifySink... Window Text : 
525792... Class Name :RICHEDIT60W... Window Text : 1 of 1
525774... Class Name :OSUIBlank... Window Text : 
722376... Class Name :NUIScrollbar... Window Text : Vertical
919166... Class Name :NetUIHWND... Window Text : 
919012... Class Name :OSUIBiDiBlank... Window Text : 
656920... Class Name :OFormSub... Window Text : 
591380... Class Name :OFormSub... Window Text : 
657000... Class Name :OGrid... Window Text : 
722518... Class Name :Shell Embedding... Window Text : 
1115700... Class Name :Shell DocObject View... Window Text : 
656938... Class Name :Internet Explorer_Server... Window Text : 
656912... Class Name :OFEDT... Window Text : 
1181188... Class Name :OKtRichTbx... Window Text : 
1377904... Class Name :OKttbx... Window Text : 
525842... Class Name :OFormSub... Window Text : 


1. Finding a report window handle
Finding a page handle in the page number display area
3. Sending a page number rewrite message
Send an enter key push message


WindowHandle=FindWindow("OReportPopup", vbNullString)
WindowHandle=FindWindowEx(windowHandle, 0, "OSUI", vbNullString)
WindowHandle=FindWindowEx(windowHandle, 0, "NetUINativeHWNDHost", vbNullString)
WindowHandle=FindWindowEx(windowHandle, 0, "NetUIHWND", vbNullString)

WindowHandle=FindWindowEx(windowHandle,0, "NetUICtrlNotifySink", vbNullString)

Handle = 0
For i = 0 To 1 Step 1
Handle=FindWindowEx(windowHandle,Handle, "NetUICtrlNotifySink", vbNullString)
If Handle <> 0 Then
Dim pageNoHandle As LongPtr

pageNoHandle =FindWindowEx(Handle, 0, "RICHEDIT60W", vbNullString) 





Dim pageNoCount As Integer
pageNoCount = GetWindowText(pageNoHandle, strWindowText, Len(strWindowText))

SetWindowText(pageNoHandle, "3")

???wrong PostMessage(pageNoHandle, WM_KEYDOWN, 13, lngTemp2)



Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Call SendMessageLong(x, WM_CHAR, 13, 0&)
Call PostMessage(x, WM_KEYDOWN, VK_RETURN, 0&)


'Click ‘Open’ menuitem
Private Const WM_COMMAND = &H111

Dim hwnd, hWndMenu, hWndSubMenu, MenuItem As Integer

hwnd = FindWindow(vbNullString, "Untitled - Notepad")

hWndMenu =GetMenu(hwnd)

hWndSubMenu =GetSubMenu(hWndMenu, 0)

MenuItem =GetMenuItemID(hWndSubMenu, 1)

SendMessage(hwnd, WM_COMMAND, MenuItem, vbNullString) 




PostMessage hWnd, WM_KEYDOWN, VK_TAB, 0& works here. Thanks



Private Const WM_KEYDOWN = &H100

Private Const WM_KEYUP = &H101 Sub


hWind = FindWindow(vbNullString, "Untitled Notepad")

cWind = FindWindowEx(hWind, 0, 0, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyA, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyB, 0)
Debug.Print PostMessage(cWind, WM_KEYDOWN, vbKeyC, 0)







 












نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد