Je voudrais faire un programme (je préférerais en langage C), mais même dans le cacao, qui peut prendre des données d'un programme externe (comme iTunes ou adium) et les utilisera. Par exemple je voudrais prendre les données d'une listbox ou le texte du chat afin de le manipuler. J'ai besoin d'un endroit pour commencer. Dans Windows, je pense qu'il est possible avec certaines API de trouver le hWnd d'une fenêtre puis de trouver un pointeur vers la listbox ou la zone de texte. S'il vous plaît donnez-moi quelques informations sur la façon de commencer. Merci d'avance.Comment gérer les données d'un programme externe sur Mac OSx
Répondre
On ne sait pas exactement ce que vous voulez faire. C'est soit impossible, soit sévèrement restreint. D'une part, différentes applications utilisent différentes méthodes de construction d'une "listbox": les applications Cocoa utilisent NSTableView, les applications Carbon utilisent DataBrowser, et les applications GTK, Qt et Java utilisent des API encore plus différentes. Ceux-ci ne passent pas tous par un genre commun de chose de boîte de liste; chacun est une implémentation indépendante.
(Vous pouvez espoir que soit NSTableView ou DataBrowser seraient fondées sur l'autre, mais ne comptez pas sur elle.)
D'autre part, il est impossible d'obtenir un pointeur sur ce contrôle. Vous ne pouvez pas accéder à l'affichage NSTableView ou DataBrowser d'une autre application ou à l'équivalent GTK/Qt/Java à moins que (et cela ne fonctionne que pour NSTableView) que cette application le serve délibérément. Cela ne semble pas être votre situation. Accessibilité, qui peut être assez proche, mais il est peu probable de travailler avec la plupart des applications non basées sur Cocoa.
Même alors, la vue peut ne pas vous montrer toutes les données. Une vue de table peut être peuplée paresseusement, et une vue de table conçue à l'imitation de l'UITableView d'iOS peut même avoir toutes les données (parce qu'elle n'a que ce qu'elle peut montrer).
(Tous les cas ci-dessus à tous les types de vue, non seulement des vues de table. Vue sur la Collection, les champs de texte, boutons-même affaire pour tous.)
La seule façon d'obtenir le vrai, copie complète des données est de demander au contrôleur qui en est le propriétaire. Et, encore une fois, c'est impossible si l'application ne vous l'offre pas spécifiquement. Sans oublier que l'application n'a peut-être même pas de contrôleur (pas orienté objet, pas MVC, ou tout simplement bâclé).
... afin de le manipuler.
Obtenir les données en premier lieu est la partie la plus facile. Il est presque impossible de manipuler des données dans une autre application, pour une bonne raison.
Le plus proche de l'un de ces objectifs est l'interface d'accessibilité.
merci beaucoup pour votre réponse. C'était très utile. Donc, la seule chose que je peux faire est OCR? (Je sais qu'il est vraiment difficile de travailler). Je vois que vous êtes l'un des développeurs adium alors prenons adium par exemple: La seule façon de sauvegarder les noms de mes contacts en ligne dans un tableau est la reconnaissance de caractères. Comment les trackers de logiciels de poker extraient-ils par exemple les données du jeu? –
btw félicitations pour votre très beau travail sur adium et growl. Ce sont les deux premières choses que je propose à quelqu'un d'installer sur son mac :-) –
OCR serait encore moins fiable. D'une part, OCR est difficile de toute façon.D'autre part, cela ne fonctionne que sur tout texte complètement visible dans la vue - tout ce qui est coupé ou que la vue ne connaît pas mais qui n'apparaît pas à l'écran (par exemple, plus bas ou plus haut que l'utilisateur n'a fait défiler) ne pas être visible. Je n'ai aucune idée des trackers de logiciel de poker. Pour Adium, vous pouvez le demander à propos de la liste de contacts via AppleScript. Pour les applications en général, le plus proche est l'accessibilité. Et merci au nom de tous les développeurs d'Adium et Growl. –