flat assembler
Message board for the users of flat assembler.
Index
> Windows > Start menu button and etc |
Author |
|
revolution 02 Aug 2010, 07:47
I've never tried it but apparently setting/deleting this registry key will disable/enable the start button. I expect you would have to restart explorer.exe for it take effect. Let us know if it works.
|
|||
02 Aug 2010, 07:47 |
|
NEOAethyr 02 Aug 2010, 09:09
I've never seen a - in the middle of a reg key before, I don't know if that works or not.
I just went into regedit, backed up the key and del'ed it manually. Reg file would of went: Code: [-HKEY_CLASSES_ROOT\CLSID\{5b4dae26-b807-11d0-9815-00c04fd91972}] It doesn't actually work as intended though. What this is, is the quick luanch popup menu that you get when you have a arrow in the quicklaunch, if you know what I mean. This class id is a potential for using to replace the win7 start menu for sure, might be possible to make a classic start menu wihtout some 3rd part app. I'll have to check into it later. Anyways after I del'ed the key, I restarted (making sure to get rid of start kiler form my run key's). Noticed what it actually did and then I ran my backup, no restart needed, my custom quicklaunch menu worked again. I'lll try to bring up a list of codes that do what I'm looking for (but I can't compile) VB: Code: Sub main() Dim lHwnd As Long lHwnd = FindWindowEx(0&, 0&, "Shell_TrayWnd", vbNullString) lHwnd = FindWindowEx(lHwnd, 0&, "Button", vbNullString) Select Case LCase(Command$) Case "/hide" Call ShowWindow(lHwnd, 0) Case "/show" Call ShowWindow(lHwnd, 1) Case "/disable" Call EnableWindow(lHwnd, 0) Case "/enable" Call EnableWindow(lHwnd, 1) Case Else MsgBox "Please use on of the following switches: " & vbCrLf & _ "/hide - Hides start button" & vbCrLf & _ "/show - Shows start button" & vbCrLf & _ "/enable - Enables start button" & vbCrLf & _ "/disable - Disables start button" & vbCrLf & vbCrLf & _ "(c) Asaf Ganot www.smart-x.com", vbInformation, "StartBut.exe" End Select End Sub Code: I don't know any ready method of doing this in "pure" script. However, if you are willing to delve into the nether-world of calling system api's from script, it is easy. Here is what you do. Use the FindWindow api to get the handle of the "Shell_TrayWnd" class (no caption) window. Then use FindWindowEx to get the handle of the (first) child window, with class name "Button" (and no caption). Then you call the ShowWindow api with the "SW_HIDE" constant to hide the (start) button. Note that there is another api to lock the keyboard (and mouse), because even without the start button, your users could get something going from desktop shortcuts. Code: 'Disable/Enable Start button Public Sub StartButton(ByRef show As Boolean) Dim primo As Integer Dim ultimo As Integer primo = FindWindow("Shell_TrayWnd", "") ultimo = FindWindowEx(primo, 0, "Button", vbNullString) If show = True Then ShowWindow(ultimo, 5) 'show start button Else ShowWindow(ultimo, 0) 'hide start button End If End Sub and now code to block ctl+ Esc keys 'System level functions to be used for hook and unhook keyboard input Private Delegate Function LowLevelKeyboardProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function SetWindowsHookEx(ByVal id As Integer, ByVal callback As LowLevelKeyboardProc, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function UnhookWindowsHookEx(ByVal hook As IntPtr) As Boolean End Function <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function CallNextHookEx(ByVal hook As IntPtr, ByVal nCode As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr End Function <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Private Shared Function GetModuleHandle(ByVal name As String) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function GetAsyncKeyState(ByVal key As Keys) As Short End Function 'Declaring Global objects Private ptrHook As IntPtr Private objKeyboardProcess As LowLevelKeyboardProc Public Sub New() Dim objCurrentModule As ProcessModule = Process.GetCurrentProcess().MainModule 'Get Current Module objKeyboardProcess = New LowLevelKeyboardProc(AddressOf captureKey) 'Assign callback function each time keyboard process ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName), 0) 'Setting Hook of Keyboard Process for current module ' This call is required by the Windows Form Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. End Sub Private Function captureKey(ByVal nCode As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr If nCode >= 0 Then Dim objKeyInfo As KBDLLHOOKSTRUCT = DirectCast(Marshal.PtrToStructure(lp, GetType(KBDLLHOOKSTRUCT)), KBDLLHOOKSTRUCT) If objKeyInfo.key = Keys.RWin OrElse objKeyInfo.key = Keys.LWin Then ' Disabling Windows keys Return CType(1, IntPtr) End If If objKeyInfo.key = Keys.ControlKey OrElse objKeyInfo.key = Keys.Escape Then ' Disabling Ctrl + Esc keys Return CType(1, IntPtr) End If If objKeyInfo.key = Keys.Alt OrElse objKeyInfo.key = Keys.F4 Then ' Disabling Alt + F4 keys 'Return CType(1, IntPtr) frmPassword.Visible = True End If If objKeyInfo.key = Keys.Alt OrElse objKeyInfo.key = Keys.Tab Then ' Disabling Alt + Tab keys Return CType(1, IntPtr) End If End If Return CallNextHookEx(ptrHook, nCode, wp, lp) End Function I only neeed to hide the start button from view, I don't need to hook the keyboard. I can see some of the api's used and import file needed but I have no idea how to use them from these examples of code. If I go about hacking the files with a res hacker, I can replace the start button images with blanks. But all that does is leave a blank area on my taskbar where the button should be. I'de like to beable to hide the thing and make it so I can't click on it. The reason why I want to do this is not so I can exploit someone's system by removing access to there software. I just wanna remove my start button so I can go on using my custom quicklaunch menu folder setup. Without using a 3rd party app that uses a meg or 2 of mem at all times lol. (I don't like seeing startkiller in my taskmanager...) If anyone can make a fasm ver of the code that does this, that would be great. Not with an empty space on the taskbar though, not sure what just hiding it would do but it would be a start. Hopefully it'll move the taskbar items to the spot where the start button used to be. Edit: Like I mentioned before, another thing I would like to do is hide/remove the max/normalize button in all windows. I don't use it, I just double click on the title's to do the same. One other thing I'de liek to remove/hide is the aero peak button. Disabling it, screws up taskbar task previews. And doesn't remove the button. And again if I res hack that, the area is still used up by an invisable button, with the clock hovering over it. It annoys the heck out of me when I'm typing somehting and my windows all dissapear from view because my mouse accidently hovered over that button. It seems to happen to me alot lol. I suppose an alternative would be soem fasm src of a taskbar replacement, with working taskbar stuffs and icon stuff int eh corner. Plus taskbar previews.. If anyone has somehting liek that to replace explorer with. Otherwise I'm content wiith using api's to gut some of the stuff I don't want. Or more interesting reg hacks... |
|||
02 Aug 2010, 09:09 |
|
sinsi 02 Aug 2010, 09:21
One problem is that the desktop refreshes itself quite often, any changes you make will be wiped out (I had my icon titles in yellow and they used to get changed back to default at ...odd times). Vista/win7 seem to protect the desktop too.
One reason the start killer runs all the time (probably) is to keep checking things and change them when the shell goes to default mode. Just drag the taskbar to the bottom or auto-hide it |
|||
02 Aug 2010, 09:21 |
|
revolution 02 Aug 2010, 09:24
This "works" on my XPSP2 box:
Code: include 'win32ax.inc' .code begin: invoke FindWindowEx,0,0,'Shell_TrayWnd',0 invoke FindWindowEx,eax,0,'Button',0 invoke ShowWindow,eax,0 invoke ExitProcess,0 .end begin But I can still access the start menu by pointing the mouse hard to the left edge and clicking. |
|||
02 Aug 2010, 09:24 |
|
sinsi 02 Aug 2010, 09:28
You could get the hwnd of the start button and make its size 0,0.
You might also need to adjust the size of the taskbar (rebar?) |
|||
02 Aug 2010, 09:28 |
|
NEOAethyr 02 Aug 2010, 09:32
I see's...
That would suck, but I've read one of the vb pages somewhere on this that when you hide the taskbar or start button it doesn't come back until you restart. I suppose it's possible that it could come back up if the theme was chnaged or something though. I use the taskbar, I got a 1080p monitor. I got it on the right side of my screen using a custom setup of opera as my browser. Works pretty good. I don't like how fat it is though. In winxp/2k3 if I do the same thing I can make it skinny and decent looking. Since tonight I've been thinking about a explorer replacement. I've thaught about it before and looked but never found anything decent. They all had missing notification area's that are used the corner of the taskbar. I would be interested in making one using gfasm but I have pretty much no experience with win32. I've only messed with it a few times for the heck of it, couldn't ever do anything useful for it. It's something I have to get into because in win7, the int21 and vesa mode stuff is gone from normal dos apps. Offtopic wise... ^^ Might anyone here have some fasm code to get ring0 in win7 x86 or access to direct hardware? It's preventing me from doing os/bios work. That and windows hanging onto file handles (com's, bat's and exe's) for a min or 2 which is super annoying (#1 reason why I haven't been programming for the last year). |
|||
02 Aug 2010, 09:32 |
|
NEOAethyr 02 Aug 2010, 09:33
Lol, you guys are fast, thanks revolution for the code above I'll check it out on win7.
It's a step closer . |
|||
02 Aug 2010, 09:33 |
|
revolution 02 Aug 2010, 09:40
NEOAethyr wrote: Might anyone here have some fasm code to get ring0 in win7 x86 or access to direct hardware? |
|||
02 Aug 2010, 09:40 |
|
sinsi 02 Aug 2010, 09:58
Code: rebar db 'ReBarWindow32',0 |
|||
02 Aug 2010, 09:58 |
|
NEOAethyr 02 Aug 2010, 09:59
No I don't .
I have it in kernal debug mode and have x64 mode unsigned driver support setup for the bootmgr. In windows I have unsigned driver support enabled. Before I got into kernal debug mode I tried hacking the kernal for support for more then 3gigs, bsod's. I haven't tried that since. Might work now. What I'm looking to do with ring0 is access mem and ports directly so I can dump stuff for bios work. I also want to make a temp monitoring program for windows, I've made one before for my modded bios on my old board, the dfi nf2, using a pci rom module with a device id of the chipset, replacing the normally not working nvidia lan boot rom. When I use the chipset it's self as the id it forces the rom to start even when the cmos option for it is disabled, ie the realtek lan rom. Since the nvidia rom never worked in the 1st place that is the one I use to replace (another one I replaced before in the past was the sata raid rom). This probably works on new boards too, making a pci rom with the id of the chipset (say amd north bridge on the cpu). I had to use a special class to make it happen, I used: db 0x00, 0x00, 0x0B ;Processor Board automatically runs it. In my rom I would parse the cmos for a single byte to see if I should load my custom debug rom os, or continue booting in 3 ways. ie: Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Init ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Init: call Get_Entry_Point lea di, [Entry_Point+bx] ;Store The Entry Ptr In Memory mov [cs:di], bx mov ax, cs mov [cs:di+0x0002], ax call Scan_ENV lea di, [OS_Flag+bx] cmp byte [cs:di], 0x01 ;Check for DOS jb ROM_Init je DOS_Init ja NT_Init jmp Exit ;just incase ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ROM_Init ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ROM_Init: je Check_CMOS ;checks for a certain cmos offset to see how it should behave when exiting Check_CMOS_End: call Get_Entry_Point ;I might need this for now... call Get_IVT ;call Set_IVT call Setup_SVGA call Clear_Screen mov si, Msg_Main_Menu call SVGA_Print_String TEST_LOOP: jmp TEST_LOOP call Get_VGA_Mode_TXT lea di, [Default_VGA_Mode+bx] mov [cs:di], al lea di, [VGA_Mode+bx] mov byte [cs:di], 0x03 call Set_VGA_Mode_TXT call Main_Menu_TXT jmp Exit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; DOS_Init ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DOS_Init: call Get_Entry_Point ;I might need this for now... call Get_IVT call Set_IVT call Set_DTA call Get_VGA_Mode_TXT lea di, [Default_VGA_Mode+bx] mov [cs:di], al lea di, [VGA_Mode+bx] mov byte [cs:di], 0x03 call Set_VGA_Mode_TXT call Command_Window ;call Main_Menu_TXT jmp Exit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; NT_Init ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NT_Init: call Get_Entry_Point ;I might need this for now... call Set_DTA mov ax, bx mov di, Text_Color ;Text Color add di, ax mov dword [cs:di], 0x00FFFFFF mov di, Text_BG_Color ;Text Background Color add di, ax mov dword [cs:di], 0xFF000000 mov di, BG_Color ;Background Color add di, ax mov dword [cs:di], 0x00005077 ;call Setup_SVGA ;call Clear_Screen ;mov si, Msg_Main_Menu ;call SVGA_Print_String ;call Main_Menu ;TEST_LOOP: ;jmp TEST_LOOP ;call Get_Entry_Point ;I might need this for now... call Get_VGA_Mode_TXT call Command_Window ;call Main_Menu_TXT jmp Exit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Exit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exit: ;The OS Exits this way when not in ROM lea si, [OS_Flag+bx] cmp byte [cs:si], 0x00 je ROM_Exit lea si, [Default_VGA_Mode+bx] lea di, [VGA_Mode+bx] mov al, [cs:si] mov [cs:di], al call Set_VGA_Mode_TXT ret ROM_Exit: ;ROM Exits the OS this way lea dx, [Msg_Exit+bx] call Print_String ROM_Exit_Loop: ;Do this so we can get to the boot menu in the BIOS call Dump_Keyboard cmp ah, 0x01 ;Esc key jne ROM_Exit_Loop ROM_Exit_Loop_Ret: lea si, [Default_VGA_Mode+bx] lea di, [VGA_Mode+bx] mov al, [cs:si] mov [cs:di], al call Set_VGA_Mode_TXT retf ROM_Exit_2: ;Optional Quick Exit (CMOS) retf Strap_Exit: ;Hijacks the system by leaving it's code in shadow ram, it doesn't ever return though for now dw 0x19CD ;Skip the DMI Pooling and CMOS Backing up..., skips boot menu too , and fails to set vga mode jmp Exit ;Just incase for something ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; The above just to show what I'm talking about, way offtopic lol. It handles varibles that way because the os can run in shadow ram, in dos or windows cmd line with the same file (rom ver is compilied slightly diff though for obvious reasons). Apperently I was in the middle of something in the above and left it in a test phase lol. Anyways I tried the win32 code that was posted but it doesn't seem to work in win7. Somewhere on gogole someone had said that there was another way of doing it that worked in xp and win7. I'll be installing win2k3 in a few days so I suppose I can try it in that os when I do. As for my rom module code(and com file), if I can get back into a decent os, win2k3, I'll fix it up and post the basic portion of it. |
|||
02 Aug 2010, 09:59 |
|
NEOAethyr 09 Aug 2010, 12:02
Ok I got my windows 2003 up and running.
The code: Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; include "win32ax.inc" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Code Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .code begin: invoke FindWindowEx,0,0,'Shell_TrayWnd',0 invoke FindWindowEx,eax,0,'Button',0 invoke ShowWindow,eax,0 invoke ExitProcess,0 .end begin ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; That works in win2k3 but not win7. What I'm most interested in at the moment is how to redo the taskbar position to replace the now hidden start button. Anyone got any ideas ? Sorry but like I mentioned before, I'm totally not experienced in win32 yet. |
|||
09 Aug 2010, 12:02 |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.