Windows Phone 8 - private APIs? - api

Is it possible to use private APIs in Windows Phone 8 development similar to iOS development?
Of course, this is NOT about apps going to get published (AppStore/Marketplace). But there are a lot of use cases for non-public projects where a developer wants to call internal system functions.
With the Windows Phone 8 SDK installed, one can mount the Windows Phone 8 Emulator image located in C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Emulation\Images. In the main partition of the Windows Phone OS, one can navigate to Windows\System32 and inspect the system DLL files with a tool like Dependency Walker or IDA Pro.
There are a lot of functions that sound very interesting but which are not publicly available and thus not documented. The question is: is it possible to call them somehow from an app or by other means?
Just a few examples of interesting functions (there are much more):
ShellChrome.dll: InvokeStartMenu, InvokeScreenCapture, InvokeVolumeUp, LockDevice, ...
InputInjection.dll: ApiInjectInitialize, ApiInjectTouchEvent, ...
...
I tried to get LoadLibrary (specifically, LoadLibraryExA) working somehow in a native Windows Phone App project, and to load and call these functions (the loading of the library worked). Long story short, I ended up with access violation errors or similar when trying to call the functions (maybe because of the sandboxed execution environment). Another problem is, that I can only guess the signatures (arguments) of the functions. I can't find them out with the tools I use.

Private api? We can use dll files in the windows phone. I have used private sdk's in the windows phone. I don't think windows is going to permit us to customize the OS just like Android do, So Invoke volume up..etc stuff is not going to work through private api.

I think they only provide some private apis to only partners with an NDA.
http://social.msdn.microsoft.com/forums/wpapps/en-US/4af0e87a-ab4b-4652-891a-f198a32758cf/windows-phone-8-access-to-private-apis

You can't, the application sandbox will enforce API usage. That means you will get an UnauthorizedAccessException every time you try to do a call to an api requiring rights you don't have.
This is intimately tied with the developer account you use to unlock your phone for development purposes.
EDIT : That's also true on the c++ native side.

Related

Get Window handle in Windows store app

I am working on a app which needs to have a custom camera capture dialog to enable zoom, flash etc. which default CameraCaptureUI does not have. My app will be deployed on tablets and I have a .NET SDK (provided by tablet vendor) which I can use to enable zoom, flash and every other thing. The SDK is not compatible with windows store app and it uses Win32 api but I can still use some of it functions.
So this SDK have a preview method which requires window handle (InPtr) to start a preview. The problem is I cant find window handle for a store app window or rather I don't know how to find it. If i can find it somehow I am sure I will be able to implement other features easily enough.
Can someone show me how to find window handle in Windows store app?
Thanks a lot for any pointers!
According to this post: http://tinyurl.com/pf5kpyv you can find the window handle of a store app using the Win32 API. But if your target is WinRT, you won't have the Win32 API available (probably you already know this). If your target is full Windows 8.1, it might be easier to just write it as a non-store app. Of course, if your client requires it to be "modern" than you're stuck :)

Visual Studio Blend: using physical Windows Phone as a target device

Okay, okay - this should be simple, but I just can't figure it out, and Google isn't helping. I just bought a Lumia 635 for developing apps for the Windows store, and I'm using Blend to make my apps in HTML and JS. I've been getting along just fine so far, but it seems that I'm unable to select my WP as a target device.
I've already "unlocked" my windows phone device so that I can use it to develop. I don't believe it's to do with drivers since I would assume Win8 has the drivers inbuild. I'm wondering, is this even possible from within blend? There is a separate program named "Windows Phone App Deployment". Do I have to use this? There seems to be very little concise documentation on this, so I'm assuming it's not possible.
For universal apps, the available deploy targets are based on which project you choose as your startup project. By default the Windows App is the startup project, so it gives you deploy options like Local Machine and Simulator (Windows Tab). Change your startup project to Windows Phone App and you'll see the device option as well as different phone emulators.

Getting MAC Address in Windows 8 app

I am creating a windows 8 app. I have a requirement to save MAC address of my device but I could not find a way to get the MAC Address.
Can anybody help me out??
This thread says that it is not possible from a Windows Store app, by design. The comments offer some alternatives:
List of WIN32 and COM API that can be accessed from Windows Store apps: http://msdn.microsoft.com/en-us/library/windows/desktop/br205757.aspx
Use ASHWID a unique identifier, using this you can make per device logic for apps: http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx
Sample from Microsoft for download that successfully gets information like the system model and system manufacturer: http://code.msdn.microsoft.com/windowsapps/Device-Enumeration-Sample-a6e45169

Offering a Windows 8 App together with a desktop application

I am looking to offer a Metro app with my desktop application. The problem is that users will be getting the desktop app, while the Metro app would just be a companion that is practically useless without the desktop application. So since it's not possible for consumers to get Win 8 apps without the Store (as far as I know at least) I am looking for alternatives. Is it, for example, possible to call the Windows Store during installation and get the user directly on the store page for the companion app? Even better, would it be possible to get that process automated?
Thanks in advance
You would just have to document the fact that there is a sister app avalible from the store. As you know, this companion app would still have to undergoe the rigorous Microsoft test proceedure so could not be shipped with the desktop version. I suppose you could have a "Get Metro App" link somewhere in your main application that would go to your metro page ready for the download...
You will have to modularise the desktop app to work both with and without the Windows 8 Metro app (something I am sure you would do anyway).
I hope this helps.
Your app must be fully functional to pass Store certification. You wrote ...
"... Metro app would just be a companion that is practically useless
without the desktop application."
Section 1.2 of the Certification Requirements reads ...
The Windows Store offers only fully functional apps to provide
customers with the best experience. Anything that might cause our
testers to think that your app is not completely finished will cause
your app to fail certification.
The testers will not install a companion app and therefore your app will fail certification. It will also likely fail 1.1 ...
Your app must offer customers unique, creative value or utility in all
the languages and markets that it supports
It is not clear from your question if the "Store" app will be communicating with the desktop app. If there is a requirement to have a desktop app installed in order to fully use the Store app, the certification process will be a lot more complicated. You will need to supply a copy of the desktop app to the certification team for testing, and there is no guarantee that this sort of app will be accepted into the store.

Desktop Application upon Gecko/Mozilla or WebKit

How can I develop an installable desktop application on top of the Mozilla Engine or the Webkit engine.
We want to have best of both worlds, ease of development with DOM+Javascript+RenderingEngine+ContinuedImprovements in a Browser and user's control as in a desktop app
I looked at using C++ XPCOM for Mozilla but it seems to be quite complicated, Is there any other way to code like a WebApp using Javascript but burn it into the browser and dress it to give a feel of a desktop app. Also I require that javascript is compiled into native so that one cannot sneak into the source code
Are there any examples of desktop applications done this way ?
Web apps are fine but there are concerns of piracy, privacy, security and version control. The moot point is that in a web app the control lies with the software vendor, moreover the data is also with the vendor. Not only these, any changes to the application may also necessitate another around of training. What we want is that once the customer buys a version he is sure of what he owns and that he is in total control of it and we as software developer do not exposed our source code.
The issue is we have expertise in Web App development and we want to utilize that to develop a Desktop App
Your last point is that :
The issue is we have expertise in Web App development and we want to utilize that to develop a Desktop App
Well then BowLine can be an option though it requires Ruby, so you need to consider that. You can also take a look at WebKitDotNet if you are with .net Background.
Use XUL for the user interface and code your functions using JavaScript. You problably only need C++ to expose native functionality not yet available in Gecko. Examples of software that works this way: Komodo IDE, Songbird, Firefox and Thunderbird.