ProcessInfo | A class to gather information about a process , its threads
kandi X-RAY | ProcessInfo Summary
kandi X-RAY | ProcessInfo Summary
A small class to gather information about a Windows process, its threads and modules. It supports both x86 and x64. Gathering information from a x64 process of a WOW64 process works aswell. It gathers information using NtQuerySystemInformation, NtQueryInformationProcess and NtQueryInformationThread. Use SetProcess to specifie a process. The handle needs PROCESS_VM_READ | PROCESS_QUERY_INFORMATION | PROCESS_QUERY_INFORMATION_LIMITED access rights. It's recommended but not mandatory to call RefreshInformation when specifying a new process.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of ProcessInfo
ProcessInfo Key Features
ProcessInfo Examples and Code Snippets
Community Discussions
Trending Discussions on ProcessInfo
QUESTION
I'm writing a StreamDeck plugin, which allows bringing specific processes window to the front. The idea is to be able to quickly switch to specific application with a press to a button (eg. switch to Teams call and hang it up with press of another button). Moreover, this is tool (mostly) for me, so please, no "another next application with forced annoying popups" comments.
I'm wondering, what would be the proper way of implementing this feature?
Windows may be brought into foreground with SetForegroundWindow
function, which has the following restrictions mentioned in the docs:
The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:
- The process is the foreground process.
- The process was started by the foreground process.
- The process received the last input event.
- There is no foreground process.
- The process is being debugged.
- The foreground process is not a Modern Application or the Start Screen.
- The foreground is not locked (see LockSetForegroundWindow).
- The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
- No menus are active.
An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.
A process that can set the foreground window can enable another process to set the foreground window by calling the AllowSetForegroundWindow function. The process specified by dwProcessId loses the ability to set the foreground window the next time the user generates input, unless the input is directed at that process, or the next time a process calls AllowSetForegroundWindow, unless that process is specified.
Important thing: I am aware of the workarounds (namely, simulating pressing alt key, what actually produces weird results sometimes).
However, I don't want to workaround the problem, but solve it directly (if possible).
The catch is, that plugins for Stream Deck works as separate processes (actually, even separate executables) and communicate through web sockets, with all the consequences (eg. I may as well create windows if needed).
My question would be: what would be the proper way of activating a window from within my process? The problem is that entry point is not direct user input (in terms of what WinAPI treats as user input, what would probably solve the problem), but user input via websockets.
Edit: in response to comments.
I tried to implement the solution with UI automation and SetFocus worked, but the window was not brought to foreground.
The source (you can copy & paste to a new console application) is as following:
...ANSWER
Answered 2022-Mar-13 at 10:16SetForegroundWindow
works best only when calling application is the foreground one. If button is owned by your process it should work without problem, but if button is owned by main StreamDeck process, you need somehow to instruct it to call SetForegroundWindow
with proper arguments (maybe feature request is needed).
For keyboard input RegisterHotKey
is recommended. When registered hot key combination is pressed the window processing WM_HOTKEY
gets special exemption (foreground love https://devblogs.microsoft.com/oldnewthing/20090226-00/?p=19013) so SetForegroundWindow
could be used to change foreground window.
In other cases, you could use workarounds, risking that in the future they could stop working.
QUESTION
As a temp solution I'm implementing a way to get some data via a 32-bit DLL to a 64-bit application.
I'm keeping it as simple as possible, it doesn't need to be high performance or the most beautiful solution. The idea is not to waste too much time on fancy handshaking, etc.
To that end, my 64-bit application loads a 64-bit DLL of my own making (which has the same exported functions as the 32-bit DLL). So, in the main app, nothing changes.
The 64-bit DLL creates a memory-mapped file and starts a 32-bit helper program, by passing the name of the memory-mapped file and some other input data on the command line.
The helper executable loads the 32-bit DLL, calls a DLL function, copies the data into the shared memory-mapped file, exits, and .. Bob's your uncle.
That is to say .. Bob is having a bad day , it doesn't work. WriteFile()
to the memory-mapped file fails with Windows API error 6 (ERROR_INVALID_HANDLE
), as reported by GetLastError()
.
Everything works except for writing to the memory-mapped file (reading probably fails as well, but haven't been able to get to that yet).
I'm sure the issue is with how I create the memory-mapped file, I'm thoroughly out of my depth here, so I appreciate a fresh pair of eyes.
Relevant code in the 64-bit DLL:
...ANSWER
Answered 2022-Mar-11 at 01:26Based on the comments I realized I misunderstood the use of a FileMapping HANDLE
and the purpose of MapViewOfFile()
.
Instead of using ReadFile()
and WriteFile()
on the memory-mapped file I can simply use memcpy()
on the pointer returned by MapViewOfFile()
Here is the fixed code:
Relevant code in the 64-bit DLL:
QUESTION
i want to calculate the total of the numbers entered by the user. After a user has added item name and the amount, i want to display the total. How can i do this? i just need to display the total.
For example item name : 10 item name : 5 total = 15
...ANSWER
Answered 2022-Feb-15 at 14:22you have to stored the previous value somewhere in memory to be able to reuse it at next iteration
one proposal can be to stored it in dataset of the field
QUESTION
I'm currently writing some software that has two different programs using the winapi (a parser and an interpreter). I would like to call the parser from the interpreter, so I am using the CreateProcessA
function. However, when the parser tries to open a file, it throws a Permission Denied error, and I'm not too sure why.
Calling the parser on its own, and not from the interpreter, works perfectly fine.
According to CreateProcessA, "The new process runs in the security context of the calling process," so it seems like this other program shouldn't have any issues with permissions since I can open files from the interpreter.
Is there something that I'm missing with CreateProcessA
that would make it change file permissions for the child process?
Here is a snippet of code for the interpreter (note that I've left out error checking to make the code simpler to show here):
...ANSWER
Answered 2022-Feb-12 at 05:22I dont think that problem is in the file permissions. If you could write file somewhere, you clearly should be able to read it with the same access token. You could get Access Denied
error because file is still open by the interpreter process in the exclusive mode. You could either check that file is closed before calling CreateProcess
, or use CreateFile
to read and write with FILE_SHARE_*
flags. However it could lead to other errors, if interpreter does not complete all file write operations before parser tries to use it.
As an alternative to files in this scenario you could use memory mapped files (CreateFileMapping
, MapViewOfFile
), to share data buffers between different processes.
QUESTION
I have multiple operating systems installed on my PC, and the following batch file reboots to the OS specified in the argument:
Reboot.bat
...ANSWER
Answered 2022-Jan-30 at 01:45I found the problem. It turns out that my previous code did not start the cmd.exe
process in administrator mode, as I suspected. I made the changes below, and I executed the cmd
commands directly instead of using a bat
file:
QUESTION
I've got a MacOS/X app which in general is not averse to app-napping, but sometimes it will spawn one or more child threads to do timing-sensitive networking tasks, which do need to avoid being app-napped.
The elegant thing to do would be to have each of these threads call [[NSProcess processInfo] beginActivityWithOptions [...]]
when it starts, and also call [[NSProcess processInfo] endActivity [...]]
just before it exits, which would (hopefully) have the effect of avoiding app-nap on my process (or at least on those particular threads) only when one or more of these network-threads is running.
My question is, is this a legal/acceptable calling pattern, or is NSProcessInfo
more of a per-process-only kind of API that doesn't implement the thread-safe reference-counting logic that would be necessary to reliably yield the expected behavior if I call it from multiple threads? (if it's the latter, I can implement that logic myself, but I'd rather not reinvent the wheel here)
ANSWER
Answered 2022-Jan-19 at 22:26This API is considered like process-wide, to report that your entire Application is doing the specific kind of job, which should be or should not be affected by power saving heuristics (which are, again, per-process, not per-thread).
The best way to use it would be to begin one activity before all your background threads started, and finish it after all your important background threads finished.
You can do it with DispatchGroup or any other instrument you wish.
That is not the only way though.
beginActivityWithOptions would return the _NSActivityAssertion, which is not generally aware of threads. You could bring your own thread sync mechanism to this party.
Calling this API several times would create several _NSActivityAssertion objects, which is definetely redundant but should work, if you will properly end each of them.
QUESTION
I noticed some strange reports when the app started on iOS 15. I use the following code method to get the process creation time,
...ANSWER
Answered 2021-Dec-11 at 16:25I found that this is a new feature prewarming of ios15.
In iOS 15 and later, the system may, depending on device conditions, prewarm your app — launch nonrunning application processes to reduce the amount of time the user waits before the app is usable. Prewarming executes an app’s launch sequence up until, but not including, when main() calls UIApplicationMain(::::). This provides the system with an opportunity to build and cache any low-level structures it requires in anticipation of a full launch.
you can read this document. about_the_app_launch_sequence
QUESTION
Somewhere in my application, I am creating a process like this:
...ANSWER
Answered 2021-Nov-16 at 07:40In fact, at the time where I was trying to gracefully kill my console, it was too early to get a HWND
to the console window. It was in a test where I naively just created the process and then almost straightaway killed it. If I wait long enough (i.e. if I actually interact for some time with the process I created), then I can get the handle to the console window and send it a WM_CLOSE
message with success.
QUESTION
I'm writing an app using C# for a user to log their time usage of programs. They can pick processes and they are stored in a database.
The app is currently using a timer at a 5 second interval to loop through every running process on the device using Diagnostics.Process.GetProcesses()
and checking this list of names against the ones in the database.
Is this a reasonable way to go about this? Or would it be better to create a thread for each process in the database that listens for it to start using Win32Process.ProcessInfo.StartedEventHandler()
?
ANSWER
Answered 2021-Nov-02 at 22:54Any time you can avoid polling, you should.
On launch, you'll need to enumerate the processes to get the current system state. After this, you can you can monitor process creation using WMI: Is there a System event when processes are created?. You could even modify that query to include only the processes you care about.
Whenever you get a match (either on startup, or the WMI event), use the Diagnostics.process.GetProcesses()
call, and attach an event handler to the Process.Exeted
event: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.exited?view=net-5.0 to know when it closes.
QUESTION
I am implementing UI Testing and need to mock a service so I don't call the service again and again and remove the dependency on the network call. So, I created a Mock called MockWebservice. It is implemented below:
...ANSWER
Answered 2021-Oct-11 at 21:12Add some logic to your mocked service so that it responds differently depending on the username/password it receives
Something like:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install ProcessInfo
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page