My Windows API Library - New version available for download
EDIT (29/07/2010) : The latest version of this library is available here: http://cjwdev.wordpress.com/2010/07/...2-1-available/
I've been doing a fair amount of work with Windows APIs recently for one reason or another and every time I get one working I add it to a class library that I started months ago and add a managed .NET method that 'wraps' the API and makes it more .NET friendly and easier to reuse. Now that I'm starting to build up a bit of a collection, I thought it would be good to share this class library so that other people can use my managed .NET wrapper methods rather than having to mess about with the Windows APIs directly (I know a lot of people are not keen on doing that).
So in summary: The basic idea is that a developer could add a reference to my DLL and then they would not have to use a lot of Windows APIs directly, they could just call my .NET methods that do all the API work for them. For example one of my wrapper methods named GetTopLevelWindows combines 6 different Windows APIs to return a list of all visible windows with their handle, title bar text, class name, owning process and window icon.
So I'm just looking for some suggestions from people on any particular APIs that they would like to see included in this library. Anything that is a bit of a pain to use and would benefit from a managed version really :)
Here is a list of what I've got so far: (EDIT: Updated 29/07/2010)
Managed Methods
RefreshDevices - Causes the OS to refresh its list of connected devices, equivalent to doing "scan for hardware changes" in device manager
GetFreeDiskSpace - Returns the amount of space free on a remote disk, specified via UNC path
GetParentProcess - returns a Process object for the process that started the specified process (aka the parent process)
MapNetworkDrive - creates a network drive mapped to the specified UNC path
RemoveNetworkDrive - deletes an existing mapped network drive
GetUncPathFromNetworkDrive - Returns the UNC path that the specified network drive is mapped to
DoesNativeMethodExist - Determines whether or not a specified method exists in an unmanaged DLL
ShareExistingFolder - shares a folder and assigns the specified share permissions
Is64BitOperatingSystem (property) - Returns true if the OS is 64 bit, even if the process calling this property is running in 32 bit emulation mode.
GetAllIcons - Returns a List(Of Icon) for all of the icons in the specified dll, exe or ico file
GetIconAtIndex - Returns the icon at the specified index in the specified dll, exe or ico file
GetTopLevelWindows - Returns a list of all visible windows with their handle, class name, title bar text, owning process, and window icon
GetChildWindows - Returns a list of all child windows of a specified window, in the same format as GetTopLevelWindows
IsWow64Process - determines whether or not the specified process is a 32 bit process running on a 64 bit OS
ReleaseIpAddresses - releases all IPv4 addresses that were acquired via DHCP
RenewIpAddresses - renews the DHCP lease for all IPv4 addresses that were acquired via DHCP
JoinToDomain - Joins the computer to the specified domain
RemoveFromDomain - Removes the computer from the domain it is joined to (can also be run against a remote computer)
GetStringResource - gets a string from a DLL resource address (e.g @%Systemroot%\system32\wbem\wmisvc.dll,-203)
ReadMemory - reads a specified amount of bytes from another process's virtual memory
GetCommandLineArgs - gets the command line arguments that were passed to any currently running process when it was started (even if it was not started by your program)
GetServices - gets a list of all services that are in the specified state (running, stopped etc) with their process IDs
GetServicesFromProcess - pass in a process and get back a list of any services that are running in that process
FlashWindow - Causes the specified window to flash to get the user's attention
SetWindowState - Make a specified window hide, minimize, maximize, etc
InstallService - Creates a Windows Service with the specified parameters on the local machine or a remote machine
DeleteService - Removes the specified Windows Service from the local machine or a remote machine
EmptyRecycleBin - Empties the recycle bin
GetRecycleBinItemcount - Returns the number of items in the recycle bin
GetRecycleBinSize - Gets the total size of the items in the recycle bin
RenameComputer - Renames the local computer and corresponding domain account
GetWindowFromTitle - Gets a NativeWindow instance for the window with the specified title (NativeWindow instance includes title, owning process, icon, handle etc)
GetWindowsFromPartialTitle - Same as GetWindowFromTitle but finds any windows with the specified string anywhere in their title
GetWindowSize - Gets the size in pixels of any window
GetActiveWindow - Gets the currently active window (aka foreground window)
MakeWindowTopMost - Makes the specified window a topmost window (i.e it stays at the foreground even when not in focus, like task manager)
MakeWindowNotTopMost - Stops a window from being a topmost window if it currently is one
SetParentWindow - Makes the specified window a child of another window
DeleteUserProfile - Removes the specified user's windows profile and settings
Native APIs
GetFreeDiskSpaceEx
WNetCancelConnection
WNetAddConnection2
NetShareAdd
InitializeSecurityDescriptor
SetEntriesInAcl
SetSecurityDescriptorDacl
IsValidSecurityDescriptor
SystemParametersInfo
NetShareAdd
WNetGetConnection
GetProfileType
GetForegroundWindow
ShowWindow
RegisterHotKey
UnregisterHotKey
CM_Reenumerate_DevNode
NtQueryInformationProcess
ExtractIconEx
DestroyIcon
DoesWin32MethodExist
IsWow64Process
GetModuleHandle
GetProcAddress
EnumWindows
EnumChildWindows
GetWindowTextLength
GetWindowText
IsWindowVisible
GetWindowThreadProcessID
GetClassName
SetParent
SendMessage
GetWindowLong
GetClassLong
IpReleaseAddress
IpRenewAddress
GetInterfaceInfo
NetJoinDomain
NetUnjoinDomain
LoadLibrary
FreeLibrary
LoadString
CloseHandle
OpenProcess
ReadProcessMemory
CreateProcess
CreatePipe
PeekNamedPipe
WaitForMultipleObjects
ReadFile
WriteFile
DuplicateHandle
FlashWindowEx
OpenSCManager
EnumServicesStatusEx
CloseServiceHandle
CreateService
DeleteService
OpenService
StartService
SetWindowPos
GetWindowRect
DeleteProfile
SetComputerNameEx
NetRenameMachineInDomain
SHQueryRecycleBin
SHEmptyRecycleBin
GetProfilesDirectory
EnumPwrSchemes
SetActivePwrScheme
GetActivePwrScheme
So yeah... any suggestions that you would like me to add?
Cheers
Chris
Re: My Windows API Pack - Now available for download :)
The first release of this library is now available for download :) See the first post in this thread or my signature for a link and anyone that uses it please let me know if you have any feedback (good or bad!)
Thanks
Re: My Windows API Pack - Now available for download :)
Downloaded, will take a look at.
Re: My Windows API Pack - Now available for download :)
cheers :) let me know if you find any problems
Re: My Windows API Pack - Now available for download :)
Hey.Done a little reverse engineering on the dll (hope you forgive me that :o ) and i can say it's very well structured.Although i don't have vs so i can't use it or any need at the moment for the specific API's but your "networking" i think will help a lot of people.
I have an out of topic question though.Did you use the xml file to store the comments?Can this be done?I was only away of using the 3 " ' " or system.componentmodel .
Errr so any links on that...err of topic? :)
Re: My Windows API Pack - Now available for download :)
That is what that is sapator. The XML file is generated by VS.
Re: My Windows API Pack - Now available for download :)
Re: My Windows API Pack - Now available for download :)
Unless you mess with settings, typically automatic.
Re: My Windows API Pack - Now available for download :)
Hm.
Funny i've never gave notice....
Anyway don't wanna spam with irrelevant things.Thanks.
Re: My Windows API Pack - Now available for download :)
Quote:
Originally Posted by
sapator
Hey.Done a little reverse engineering on the dll (hope you forgive me that :o ) and i can say it's very well structured.
Thanks :) and no worries, anyone who wants the source code just send me a PM/email.
Quote:
I have an out of topic question though.Did you use the xml file to store the comments?Can this be done?I was only away of using the 3 " ' " or system.componentmodel .
Errr so any links on that...err of topic? :)
All I did was the 3 " ' " like you mentioned above each method and it creates the comment fields like "<summary>" etc and it stores them in the XML file automatically. The XML file is in your Bin\Release folder when you build the solution and as long as that file is in the same folder as the DLL then you will see the comments in intellisense when you use methods from that DLL.
Oh but any normal comments (ie not ones in a <summary> or <param> tag etc) will not be included in the XML file.
Re: My Windows API Pack - Now available for download :)
Thanks.As i said i never did notice that.Probably cuz i usually pack everything.
Re: My Windows API Pack - Now available for download :)
Added some new stuff to this today so will be releasing a new version soon :) I plan on releasing updated versions quite often rather than waiting until I've got loads of new stuff.
The main addition in this version will be some power management methods, which will be in a new class named NativePowerScheme. There will be plenty of other new stuff as well though - I've listed all of the items I'm planning to add to it below (some of which I've already got finished and others are still a work in progress). Oh and the first 2 methods in this list are ones that were intended to go into the last version but I had some issues that meant that didn't happen... got them working properly now though.
NativeNetwork.ReleaseIPAddresses
Releases all v4 IP addresses that were acquired via DHCP
NativeNetwork.RenewIPAddresses
Renews all v4 IP addresses that were acquired via DHCP
NativePowerScheme.GetAvailablePowerSchemes
Gets a list of all power schemes, with basic information such as the name, description and index
NativePowerScheme.GetActivePowerScheme
Gets the currently active power scheme
NativePowerScheme.SetActivePowerScheme
Sets which power scheme is active
NativeOperatingSystem.RenameComputer
Renames the local computer to the specified new name. If the computer is part of a domain then the domain account for the computer is renamed as well
NativeOperatingSystem.DeleteUserProfile
Deletes a user's profile and all user related settings
NativeOperatingSystem.UserProfilesDirectory (property)
Returns the root directory path where all user profiles are stored (I dont think there is an environmental variable for this but if anyone knows of one then let me know and I wont bother including this)
NativeFileSystem.EmptyRecycleBin
Empties the recycle bin
NativeFileSystem.GetRecycleBinItemCount
Returns the number of deleted items in the recycle bin and the total size of the recycle bin
NativeWindow.GetWindowFromTitle
Finds a window that has the specified title and creates a NativeWindow instance from it (which includes the title, handle, owning process and window icon)
NativeWindow.GetWindowFromPartialTitle
Returns a list of all windows that have a title that contains the specified string - useful if you dont know the entire title of the window
NativeWindow.MakeTopMost
Makes the specified window a "topmost" window so that it always appears on top of all other windows
NativeWindow.GetActiveWindow
Gets the window that currently has focus and creates a NativeWindow instance from it (so includes window title, owning process, handle etc)
As always, if anyone has any suggestions for any particular methods they want to see in this next version then let me know :)
Re: My Windows API Pack - Now available for download :)
Good list of addons chris, can't wait for the next version.
Re: My Windows API Pack - Now available for download :)
Hi Chris,
First of all, let me just say that this is a fantastic piece of work :). I am using your API pack to get icons from .exe- and .dll-files, and it works like a charm :)
However, I am creating a taskbar sort-of-thingy, which consists of two forms -- frmMain and frmBar. The thing is that when mouse position.X equals My.Computer.Screen.WorkingArea.Width, frmBar moves in front of the other windows using Me.BringToFront() and Me.Activate(). This works great when I run the app under the IDE (VS2010), but when VS is not running, the form is always flashing a bit (according to MSDN this is because my application is not the active application). So I was trying to use your method .NativeWindow.StopFlashWindow to make it stop flash right after Me.Activate, but I can't figure out how to do it...
So I was thinking maybe you (or someother) can give me an example on how to use it??
Edit:
Problem solved :)
vb Code:
Cjwdev.WindowsApi.NativeWindow.StopFlashWindow(Me.Handle) 'duh
Arve
Re: My Windows API Pack - Now available for download :)
Btw, this (post 2) is the code I am using to get the mouse positions outside the form. Maybe this is something you could add to your API pack? :)
Re: My Windows API Pack - Now available for download :)
Quote:
Originally Posted by
_powerade_
Hi Chris,
First of all, let me just say that this is a fantastic piece of work :). I am using your API pack to get icons from .exe- and .dll-files, and it works like a charm :)
...
Edit:
Problem solved :)
vb Code:
Cjwdev.WindowsApi.NativeWindow.StopFlashWindow(Me.Handle) 'duh
Arve
hey really glad it has helped you :) and yeah I see you figured out how to use the StopFlashWindow method.
Re: My Windows API Pack - Now available for download :)
For anyone interested, the new version (along with a list of all the new methods) is now available here: http://cjwdev.wordpress.com/2010/07/...2-1-available/
:)
Re: My Windows API Library - New version available for download
Code:
Cjwdev.WindowsApi.NativeNetwork.ReleaseIpAddresses()
Keeps throwing this error:
Code:
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred
in Cjwdev.WindowsApi.dll
An attempt was made to reference a token that does not exist
Any ideas? I'm definitely using DHCP.
Re: My Windows API Library - New version available for download
Thanks for letting me know - I tested it on my windows 7 machine as an admin and also as a standard user and it worked without an issue. However I just tried it on an XP machine I found that it worked as an admin but as a standard user I got the same error you mentioned. I had made a stupid mistake in the exception handling but I've fixed that now and uploaded the new version so it should now report the correct error (Access is denied - which you get because non admin users in XP cannot release IP addresses). I've uploaded the updated DLL so can you give that one a go and confirm that it gives you the correct error message now? Of course if you are not running this on XP or are running it on XP but as an admin then let me know as it's obviously a different issue that you are seeing. Download link for the new version is the same as before - http://www.cjwdev.co.uk/DeveloperCom...WindowsApi.zip
Thanks
Chris
Re: My Windows API Library - New version available for download
Different error this time:
Code:
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred
in Cjwdev.WindowsApi.dll
The system cannot find the file specified
I am running on WinXP Pro SP3 and my ID has local admin rights. I removed and re-added the dll in the references tab. Still no go. But this code works fine:
Code:
NativeOperatingSystem.Is64BitOperatingSystem
Re: My Windows API Library - New version available for download
Quote:
Originally Posted by
cjconstantine
Different error this time:
Code:
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred
in Cjwdev.WindowsApi.dll
The system cannot find the file specified
Ah I think I encountered that one when I was writing one of the other network card related methods. It was a while ago but I think in my case it was due to a virtual network card that some VPN software had installed - once I uninstalled the VPN software the error stopped being thrown so I assumed it was just a problem that that particular installation of the VPN software. Do you know if you have any virtual network cards on your PC?