Checking if the current user is active? - c#

Windows Live Messenger, Skype, the indexing service in Windows and the screensaver functionality in Windows all have a way of detecting when the user moves his/her mouse, or uses his/her keyboard to detect when they are active, and when they are not.
Is there a Windows API used for detecting if the user is present at his PC? What about proximity sensor APIs in Windows 8? Or is it required for me to actually detect if the user moves his mouse or uses the keyboard through existing Windows APIs?

I found a solution using this API.
http://www.pinvoke.net/default.aspx/user32.GetLastInputInfo
It delivered exactly what I needed.

I guess you would have to dig in to WIN32 API and Windows Messaging Queue.
In particular look at the WM_MOUSEMOVE message. Check; http://msdn.microsoft.com/en-us/library/ms645616(VS.85).aspx
Use your application to review that message and build a timeout mechanism.
Also check out this link for a C++ variant: http://www.cplusplus.com/forum/beginner/11226/

Related

RequestAccessKindAsync from Desktop Bridge

I have Win32 desktop bridge application that uses background task to receive push notifications from WNS. I use UWP background task APIs over C++-WinRT
I'd like to be able to receive push notifications even when OS is in sleep so that it wakes up and the app handles push notification. By default OS does not wake up. It did only after manually changing settings value in System->Battery->See which apps are affecting your battery life->Click my app ->Uncheck Let Windows decide option (by default it is always checked) and check Allow the app to run background taks. Now I'd like to do this is manual work on code for better user experience.
RequestAccessKindAsync API allows to let user to change above setting value by showing popup notification to the user and I could do it without any problem in UWP C# sample app. But same code does not show pop notification from my desktop bridge over C++-WinRT. It simply returns false value for below code
auto result = co_await BackgroundExecutionManager::RequestAccessKindAsync(BackgroundAccessRequestKind::AlwaysAllowed,
L"App needs to use background to catch push notifications while device is in sleep");
Can anyone confirm that RequestAccessKindAsync API works from desktop bridge? If not then how I can make sure OS and the app will always be able to wake up from sleep when it receives push notification?
UPD: Raised request to enable this API from desktop brige here
This is a missing feature. When we designed this API a couple of releases ago we didn't consider desktop bridge apps would be calling it - but clearly there is a use case for supporting this. I have notified the team about this gap, but I'd also encourage you to log a feature request here: https://wpdev.uservoice.com/
Two possible workarounds:
(1) you could add a dummy/empty UWP foreground app to your desktop bridge app. You can then launch this on startup and request the background access from there. This will be a bit ugly, but you could make it look like a splash screen :-)
(2) you can instruct the user to go into the Settings app to set your app to always allowed. You can help them do that with a deep link to the battery save settings, but they will still need to manually flip the switch.

Is possible to create a vb.net or c# app to send notification to mobile using bluetooth without any mobile app?

create a server app in vb.net or C#. It'll run on system with turned on bluetooth. If any mobile with turned on bluetooth devices will comes within the system bluetooth signal, it'll send notification automatically. Is this possible to create?
No. It would not work.
APNS
https://developer.apple.com/library/IOs/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html
GCM
https://developer.android.com/google/gcm/gcm.html
Push notifications requires to be pushed from Apple's or Google's notifications infrastructures.
For iOS there's local notifications that your app can trigger based on your conditions, but from my knowledge when the Bluetooth connects, your application has to be running and listening for bluetooth changes.
If your app goes into background and got recycled, it would not be able to know when the bluetooth is connected, let alone run your logic to send the notifications.
No this is not possible. Your title asks for "without mobile app". The mobile app on the device is what receives the notification. You create the notification on the server (as shown in #Lee's explanation) and your app decides whether to show it to the user or process data behind the scene.
Assuming we disregard the part about "without mobile app", you CAN do something similar with iBeacons. Department stores use them for targeted notifications in their app. You walk by a certain rack of clothes with an iBeacon and your app shows a notification that that section is 20%.
As an alternative, you might, somehow, also be able to use a service like Twilio which you can TEXT/MMS information (notification) to someone based on some kind of trigger that you define. This would however require that you already have their phone number and some what to identify that they came within your region.
As a whole, being able to notify people within a proximity that haven't done something to subscribe (i.e. download your app, provide contact info) is just plain spammy.

Detect when your windows 8 app is uninstalled?

How can I tell using c# or winjs when your app that the user downloaded is being uninstalled?
Can you call home, or try to save the client by giving/redirecting them to a site with an exit poll?
Not supported. A key goal with the Windows Store is to make it seamless and painless for consumers to try apps. One result of this is that Store apps don't have any control over or hooks into install/uninstall processes. Bottom line is that the act of uninstall is not a time to try to exercise user engagement strategies. :)

WP7: Access built in events

I'm want to know how can I create an application that is launched with built in events in windows phone like incoming call or email reception.
There are some things that you can add your app to. Perhaps you create a Photo App or a Music App. You can register your app as that type and it will prompt the user to open a photo or song with your app.
Developing Windows Phone 8 apps with file and URI associations
Outside of that though you cannot access phone events. Functions such as this are locked off to developers by Microsoft to provide added security to users and also provide a consistent experience across the platform.

Restrict access to audio device under Windows XP-8 to specific application/user

I have written an c# 4.0 application that analyses the microphone input and records DTMF tones that represent credit card numbers entered by our clients. This all works well, but since we are working under PCI Compliance (see www.pcisecuritystandards.org), we don't want to allow the logged in user (call centre staff) to listen or even record the microphone input so that they then can parse the credit card numbers on their own with a 3rd party app or their phones. So the question I have is:
How can I restrict the microphone input to a specific application so
that it can't be heard or recorded somewhere else?
If there is no solution to this, the 2nd question arises:
How can I restrict the microphone input to a specific user so that it
can't be heard or recorded somewhere else (I could run the software
as a Windows service under specific user credentials)?
Kind regards,
JB
The main way to restrict access to device is setting of Security Descriptor on the device. So granting of the permission for specific user group is the way in which you should go.
The exact implementation for Windows XP could be different from later versions of Windows. Windows 8 have new possibilities too. Audio Mixer APIs can be used in Windows XP. Starting with Vista Windows Multimedia Device (MMDevice) API can be used. MMDevice API's implementation of the property store. You can use IPropertyStore::SetValue and IPropertyStore::Commit to change properties. Unified Device Property Model are introduced starting with Windows Vista. There are different Windows API which uses internally SetupAPI to access to devices and to set it's properties (see here). I think that you should set PKEY_Device_SecuritySDS property to secure device. One can use old APIs like SetupDiSetDeviceRegistryProperty and SetupDiSetClassRegistryProperty to set the properties on Windows XP (see here).
If I start on my computer devmgmt.msc and examine default property of microphone device then I can see Security Descriptor
What you need is to change it so that only specific user groups (or users) access it.
There are PKEY_Device_SecuritySDS and PKEY_Device_Security properties which can be change by SetupDiSetDeviceProperty and SPDRP_SECURITY_SDS or SPDRP_SECURITY (see here). Usage of SDS parameters (PKEY_Device_SecuritySDS or SPDRP_SECURITY_SDS) could be easier because there use readable Security Descriptor Definition Language (SDDL).
After you change security descriptor on the device you need use SetupDiSetClassInstallParams and SetupDiCallClassInstaller with DIF_PROPERTYCHANGE and DICS_PROPCHANGE to reset the device. You can find the code example in the source code of devcon utility on WinDDK. Alternatively you can use CM_Disable_DevNode and CM_Enable_DevNode to restart it with new properties.
You should be able to do it with the Core Audio API. For each playback device and capture device in the system, you can control whether the device can be used in exclusive mode.
One drawback - there is no support for Core Audio API under Windows XP.
I think the solution to your problem is to write a KS Filter
Create a Kernel Streaming filter that is able to decode the DTMF on demand of your application and send the decoded data to your application. When the filter is in DTMF decoding mode, it just outputs silence to the rest of the filter stack.
If an USB audio device is used, you could also write a GFX Filter instead, which can be configured on a per-user-base. But this only seems to work for 32-bit operating systems. WinDDK has a sample called gfxswap.xp.
You can use ASIO audio drivers in your application.
ASIO is a technology developed by Steinberg to provide low latency audio input and output, and as a side effect, requiring a device using an ASIO driver completely restricts the device use to the process that required it, in addition to multiple other advantages that may be irrelevant to your needs.
It is available for every soundcard thanks to the ASIO4ALL project, so compatibility won't be an issue as long as you provide it with your application
For more informations, check out the wikipedia article about ASIO here, or pick up the SDK here ( you will need to register a Steinberg Developer account to proceed )
Will it be helpful if you can control (MUTE) the VOLUME of the sound device and set it back to it's former state once you are done? You can look at this link for ideas. Good luck.

Categories

Resources