IContextMenu Shell Extension for Phone Storage - winapi

I have implemented context menu shell extension in Windows for files and folders.
However, I don't know how to make the menu appear on right clicking on phone storage (when plugging my Android phone or similar) such as Internal memory or SSD card.
Any ideas? Is this possible?

If you means that you want to customize the context menu for the drive such as "D:\" after you connect the devices via usb, you can register the shell extension handler under:
Computer\HKEY_CLASSES_ROOT\Drive\shellex\ContextMenuHandlers
More detailed info about predefined shell objects, you can refer the link below:
Predefined Shell Objects

Related

Windows: suppress warning when plugging in unformatted flash drive

I'm working on a device that writes some information directly to a flash drive, without using any file system (it just writes blocks of data directly to the disk sectors). After the flash drive is filled, I need to plug it into any computer with windows and read data using my application.
Everything works great except for when I plug the flash drive in windows warns me that flash drive is invalid an offers me to format it. I want to get rid of this message for my flash drives on any computer that have installed my windows application.
My flash drive have signature bytes at the start so I can always make out whether it's my flash drive or just a regular flash drive.
My idea is that I should be able to write some sort of service or driver which will check all flash drives and will disallow OS to mount my drives. However I don't know whether its really possible and I can't find any documents mentioning this sort of functionality.
I'd appreciate any docs / links / functions names that can help me suppress unformatted disk warning.
Make a tiny real partition at the start and format it to keep windows happy.
Then just use the rest of the drive as you please
This seems to work:
Remove the drive letter assigned to the device:
Right-click the 'Computer' (or 'My Computer') icon on your desktop or in the Start Menu and select Manage. The 'Computer Management' window should appear.
From the list on the left, select 'Disk Management' (within the Storage sub-tree).
Right-click the encrypted partition/device and select Change Drive Letter and Paths.
Click Remove.
If Windows prompts you to confirm the action, click OK.

Can I run my winRT application as a screensaver?

Is there a way to make my winRT application as a screen saver in xaml?
As Jerry says, there's no straightforward way to make a Windows Store app screensaver. However, there's a roundabout solution that might work for you on Windows 8, but not Windows RT. I have it nearly working. I'll share what I have so far.
A screensaver is just an executable with a .scr extension that's kept in C:\Windows\System32. For example, look at C:\Windows\System32\Bubbles.scr. The solution I have in mind is to create a .scr screensaver whose only purpose is to launch your Windows Store application, which you say will use XAML.
You can't launch a Windows Store app from the command line directly, so you'll create a launcher app. Take a look at a blog post called Automating the testing of Windows 8 apps by Ashwin Needamangala. Partway down the article, look for the section called Automating the activation of your app. It contains a sample C++ application which can launch Windows Store apps in the following way:
C:>Win8AppLaunch.exe Microsoft.BingNews_8wekyb3d8bbwe!AppexNews
The sample launcher on that page needs to be modified, but before you do that just copy the code into a C++ console app:
You're almost ready to test it out from the command line, but you need to specify the name of the app as an AppUserModelId. The details are in Ashwin's post, but to paraphrase you first want to allow the execution of PowerShell scripts on your system with:
PS C:> Set-ExecutionPolicy AllSigned
Then run this PowerShell script:
$installedapps = get-AppxPackage
foreach ($app in $installedapps)
{
foreach ($id in (Get-AppxPackageManifest $app).package.applications.application.id)
{
$app.packagefamilyname + "!" + $id
}
}
You might like running it in the Windows PowerShell ISE. It's pretty slick. Find the AppUserModelId of your app and then test Win8AppLaunch.exe from the command line, as shown above. This should launch your Windows Store app from command line.
Next, modify the C++ launcher to hard-code the AppUserModelId of your application instead of parsing it from a command line argument. I created a Gist of this. The important part is the line where I declare myApp.
Build the new executable, rename it MyScreenSaver.scr and put it in C:\Windows\System32. It will then appear in the Screen Saver Settings Control Panel. You can preview the screensaver there, and it works. However, if you wait for the screensaver to launch, it will briefly bring up a console window and never fully launch. I'm not sure why. I tried disabling the creation of the console window by switching the project to a Windows app, but that didn't help. You can try that yourself by changing Properties | Configuration | Linker | System | SubSystem to WINDOWS. It's a little more involved, as you'll also need to change the entry point from _tMain to _tWinMain. Contact me through my blog if you want the details. My StackOverflow profile lists it.
At this point it's almost fully working. You might try starting with a blank C++ screensaver that you know works, and then copy in the above code. If I get more time, maybe I'll try this myself.
Cool idea. But, no.
If you want your application to really do something for Windows other than run as a simple app, then you write an extension app. Here's the official word:
Extensions An extension is like an agreement between an app and Windows. Extensions lets app developers extend or customize standard Windows features primarily for use in their apps and potentially for use in other apps.
There are these types of extension apps right now:
Account picture provider (extension)
When users decide to change their account picture, they can either select an existing picture or use an app to take a new one. If your app can take pictures, you can use this extension to have Windows list your app in the Account Picture Settings control panel. From there, users can select it to create a new account picture. For more info about this extension, see the UserInformation reference topic. You can also check out our Account picture name sample.
AutoPlay (extension)
When the user connects a device to a computer, Windows fires an AutoPlay event. This extension enables your app to be listed as an AutoPlay choice for the one or more AutoPlay events.
Background tasks (extension)
Apps can use background tasks to run app code even when the app is suspended. Background tasks are intended for small work items that require no interaction with the user.
Camera settings (extension)
Your app can provide a custom user interface for selecting camera options and choosing effects when a camera is used to capture photos or video. For more info about this extension, see Developing Windows Store device apps for cameras.
Contact picker (extension)
This extension enables your app to register to provide contact data. Your app is included in the list of apps that Windows displays whenever the user needs access to their contacts.
For more info about this extension, see the Windows.ApplicationModel.Contacts.Provider reference topic. You can also check out Managing user contacts.
File activation (extension)
Files that have the same file name extension are of the same file type. Your app can use existing, well known file types, such as .txt, or create a new file type. The file activation extension enables you to define a new file type or register to handle a file type.
Game Explorer (extension)
Your app can register with Windows as a game. To do this, you must create a Game Definition File (GDF), build it as a binary resource in your app, and declare that resource in the package manifest.
Print task settings (extension)
You can design an app that displays a custom print-related user interface and communicates directly with a print device. When you highlight the features that are specific to a particular make and model of print device, you can provide a richer, more enhanced user experience.
Protocol activation (extension)
Your app can use existing protocols for communication, such as mailto, or create a custom protocol. The protocol activation extension enables you to define a custom protocol or register to handle an existing protocol.
SSL/certificates (extension)
Digital certificates are used to authenticate one entity to another. For example, certificates are often used to authenticate a user to web services over SSL. This extension enables you to install a digital certificate with your app.
cite: http://msdn.microsoft.com/en-us/library/windows/apps/hh464906.aspx
Unfortunately, nothing has to do with screen savers. The technical reason, at this time, you cannot write a Windows 8 app that functions as a screensaver is because Windows 8 apps are fundamentally tied to run inside the WinRT execution environment. That shell does not extend out past the Start menu in this current version of Windows. So, there's no way to execute outside - like as a screen saver. Screen savers are still built the "old fashion way".

USB AutoRun: 'Open In Browser' Option never appears

I am attempting to make our webpage open when someone plugs in our USB device.
My Problem: When we plug in the USB device the autorun dialog appears but there is never an option to open/run the webpage we have specified. See below pic of the dialog we see. Isn't there meant to be an option that says something like "Open in Internet Explorer" or etc.?
What we are hoping to achieve is to have another option below 'Use this drive for backup' that says something like 'Open in Web Browser' or something that will ultimately open our webpage when the users decides to.
Heres our code that is inside the file autorun.inf which is placed on the USB device:
[autorun]
shellexecute=http://exds-test.epicservices.com.au/V10InstallationInfo.aspx
action=Open Website
label=EXDS USB Drive
According to this link, this will not work on modern OS versions
http://www.flashbay.com/services/usb-autorun
You've got to use a "helper" application.

Auto Open USB Drive on Mac 10.6/7/8/Windows XP/Vista/7

I'm creating a FAT32 formatted USB Stick/Drive to ship a product. We'd like it to behave a bit more like the hybrid CD/DVD's that we create:
Insert the disk on Mac 10.6 or later and the drive opens up and shows you a window with the application in it. We can do it from a DMG or CD but the USB drive doesn't seem to want to honor the bless command.
On Windows, we've set up an autorun.inf. On XP it's not showing the icon, label, or opening the specified file. I know that you can't have Windows Vista and Windows 7 automatically open something or add an entry to the AutoPlay list by default, but it still should show the Volume Label and icon.
Here is my autorun.inf:
[AutoRun]
Action="Install My Cool App"
Open="InstallThis.exe"
icon="Ultimate.ico"
[Content]
MusicFiles=false
PictureFiles=false
VideoFiles=false
Are these things too much to ask for a USB stick? Anyone else out there shipping things on a USB flash drive and have overcome these issues?
As of Windows 7, AutoRun feature is not supported on USB drives. Only the following commands are supported:
label
icon
See Improvements to AutoPlay on Engineering Windows 7 blog.
Examples in Autorun.inf Entries do not use quotes for values. Does it work without the quotes?
MacOS might have implemented a similar approach to Windows 7: do not autorun anything from a flash drive automatically to protect you from malware.

Mail Message Link Handling

I have written an AppleScript which when supplied with a Windows network link, will convert it to the correct smb:// equivalent for the server in our office, mount the network drive, and open the requested folder in Finder.
I have this built in an application which just takes a pasted network path. Ideally I need this to trigger on clicking a link in a Mail.app email message so that it can check if the link is in the correct format, and if so run the script and attempt to mount the drive and load the folder in Finder.
How would I go about doing this?
In order to do this I think you'd need to create a Cocoa application that was registered with OS X Launch Services as the default role handler for smb:// links.
I've written some stuff about how to do this on another question: How do you set your Cocoa application as the default web browser?
If there's a pure AppleScript solution or a way of only handling links within Mail.app I'm not aware of it.

Resources